07 A Glimpse of Industrial Solutions

Posted etherovo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07 A Glimpse of Industrial Solutions相关的知识,希望对你有一定的参考价值。

1. Anti-Aliasing

1.1 Temporel Anti-Aliasing (TAA)

  • 对于静止图像,每一帧的采样取像素内不同的区域,循环变化,下一帧复用上一帧的信息,考虑到递归,就会使得等效SSP变大。
  • 对于运动物体,使用motion vector来查找。
  • 如果出现遮挡等问题使得信息不可用,就采取相应的clamp等方法。

1.2 MSAA 与SSAA

  • SSAA
    • 使用更大的分辨率去做渲染,然后压小;可见开销很大
  • MSAA
    • 对采样的点,如果一个三角形只采到一个点就用该点shading,如果对一个三角形才到多个点则用这些点中间的点做shading;因此需要维护一张表,记录采样点的颜色和深度
    • samples复用,将采样点放在邻近像素中间,就可以复用

1.3 Image based anti-alisaing solution

  • FXAA->MLAA->SMAA(Enhanced subpixel morphological AA)
  • 矢量化

1.4 G-Buffer不可以做反走样,否则就会失去意义

2. Temporal Super Resolution

2.1 DLSS

  • 提升了分辨率,那么相应的细化的像素就难以找到上一帧的对应信息,不能直接clamp,容易糊掉。
  • DLSS 2.0就提供了利用temporal的方法。
  • 其他:

3. Shading

3.1 Deferred Shading 延迟渲染

  • 光栅化时,如果从远到近做shading时,就需要对每个fragment做shading。
  • 第一次光栅化不做shading,只更新depth buffer
  • 第二次光栅化只对等于depth的部分做shading。
  • 因为深度buffer不可以做AA,所以不能做aa,但是可以使用TAA或者图像方法。

3.2 Tiled Shading

  • 把屏幕分割成小块,对每一块做shading,如此一来可以减少需要考虑光源的数量
  • 因为光源在考虑立体角时会有平方反比的关系,所以可以假设每个光源都有自己的一个作用范围,如此一来不同的小块经过的光源范围数量是变少的,只需要渲染能影响到他的光源就可以了。

如何使用 SqlBulkCopy 并通过 Glimpse 跟踪批量插入

【中文标题】如何使用 SqlBulkCopy 并通过 Glimpse 跟踪批量插入【英文标题】:How to use SqlBulkCopy and track Bulk Inserts with Glimpse 【发布时间】:2016-08-15 05:20:20 【问题描述】:

在我们的应用程序中,我们使用SqlBulkCopy 类来促进数据库的批量加载。最近,我尝试将 Glimpse 添加到我们的解决方案中,但代码因无效转换而失败:

System.InvalidCastException:无法将“Glimpse.Ado.AlternateType.GlimpseDbConnection”类型的对象转换为“System.Data.SqlClient.SqlConnection”类型

这是因为 Glimpse ADO 正在使用包装的 SqlConnection 来实现其魔力。不幸的是,SqlBulkCopy 需要 SqlConnection,所以我需要转换 DbConnection

是否没有开箱即用的方法来分析批量插入?到目前为止,我遇到的唯一解决方法是:

(SqlConnection)((GlimpseDbConnection)dbConnection).InnerConnection

这很丑,因为它需要显式引用 GlimpseDbConnection 并且可能还需要添加自定义时间线事件来获得一些跟踪。 没有 Glimpse 插件可以解决这个问题吗?

【问题讨论】:

我不知道有一个。 【参考方案1】:

我正在使用这种方法(使用 EntityFramework 的 DbContext),它似乎有效:

DbContext Db = /* ... */;

var glimpseDbConnection = Db.Database.Connection as GlimpseDbConnection;
var sqlConnection = glimpseDbConnection != null ? (SqlConnection)glimpseDbConnection.InnerConnection : (SqlConnection)Db.Database.Connection;

var glimpseDbTransaction = Db.Database.CurrentTransaction.UnderlyingTransaction as GlimpseDbTransaction;
var sqlTransaction = glimpseDbTransaction != null ? (SqlTransaction)glimpseDbTransaction.InnerTransaction : (SqlTransaction)Db.Database.CurrentTransaction.UnderlyingTransaction;

using (var bulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.Default, sqlTransaction))

    var dataTable = /* ... */;
    bulkCopy.BatchSize = 2000;
    bulkCopy.BulkCopyTimeout = TimeSpan.FromMinutes(5).Seconds;
    bulkCopy.DestinationTableName = /* ... */;
    bulkCopy.WriteToServer(dataTable);

【讨论】:

以上是关于07 A Glimpse of Industrial Solutions的主要内容,如果未能解决你的问题,请参考以下文章

C++09: A Glimpse into the Future

fare|gave it away|catch a glimpse |involve|rip|eternalstiff|

如何使用 SqlBulkCopy 并通过 Glimpse 跟踪批量插入

在 Swift 中使用 Glimpse 时将文档目录指定为文件输出 URL

Multi-Decoder Attention Model with Embedding Glimpse for Solving Vehicle Routing Problems 学习笔记

如何一目了然地查看服务时间