我正在努力提高散装货物的性能;每天有 100 条数百万条记录。
我将其移至使用IDatareader
界面代替数据表,并且确实获得了显着的性能提升(每分钟增加 500,000 条记录)。当前设置是:
- 用于解析分隔文件的自定义缓存读取器。
- 将流阅读器包装在缓冲流中。
IDatareader
枚举对象并实现接口的自定义对象读取器类。- 然后
SqlBulkCopy
写入服务器
性能瓶颈的大部分直接在SqlBulkCopy.WriteToServer
. 如果我对流程进行单元测试,但仅排除WriteToServer
流程在大约 1 分钟内返回。WriteToServer
需要额外的 15 分钟 +。对于单元测试,它位于我的本地计算机上,因此数据库位于同一驱动器上,因此不必通过网络复制数据。
我正在使用堆表(无索引;集群或非集群;我玩过各种批量大小,但性能没有重大差异)。
有必要减少加载时间,所以我希望现在有人可以从这个出现中挤出更多的血液。