【发布时间】:2017-11-09 16:51:29
【问题描述】:
我将大量记录加载到我的应用程序中(超过 100 万),并对它们进行大量处理。处理要求它们都在内存中。
之后,我想将所有(现在修改的)记录转储到一个空表中。
加载记录只需几秒钟,我最终会得到一大堆 MyRecord 项目。
使用SqlBulkCopy 保存也只需几秒钟。
但是SqlBulkCopy 需要(我相信)DataTable - 并且将我的记录加载到 DataTable 很慢 - 大约每分钟使用 7500 条记录
dataTable.Rows.Add(myRecord.Name, myRecord.Age, ....)
有没有更快的方法来执行这个中间步骤?
【问题讨论】:
-
你见过stackoverflow.com/questions/13722014/…吗(那里声称每秒100万行)?您的 DataTable 是否有任何索引、键、表达式列、约束、与其他表的关系等,或者它是否尽可能简单?
-
我的数据表非常简单,一些字符串、整数和日期时间字段,没有多余的
-
删除,因为在对这些答案进行调查后,发现问题是一个简单的查找,它被卡在了基准测试代码中。
-
@MethodMan 至于“简单真棒的过程”,我现在正在从 8 个不同的系统加载数据——数据库、FTP、S3 文件、IATA HOT 文件(特殊解析)、屏幕抓取、Web 服务(即 XML)、REST 服务,在 SSIS 数据流中匹配它们以查找差异。我什至使用 TPL Dataflow 来解析文本文件、转换它们并将它们插入数据库,同时将它们写入文本文件以进行导入。 TPL Dataflow 也允许我并行处理多个请求,例如一次 10 个 REST 查询
标签: c# sql-server sqlbulkcopy