gpt4 book ai didi

c# - 有没有比使用 DataTable 更快的方法来使用 SqlBulkCopy?

转载 作者:太空宇宙 更新时间:2023-11-03 17:48:36 24 4
gpt4 key购买 nike

我将大量记录加载到我的应用程序中(超过 100 万条)并对它们进行大量处理。处理要求它们都在内存中。

之后,我想将所有(现在已修改的)记录转储到一个空表中。

加载记录仅需几秒钟,我最终得到了大量 MyRecord 项目。

使用 SqlBulkCopy 保存也只需几秒钟。

但是 SqlBulkCopy 需要(我相信)一个 DataTable - 将我的记录加载到 DataTable 很慢 - 使用每分钟大约 7500 条记录

dataTable.Rows.Add(myRecord.Name, myRecord.Age, ....)

有没有更快的方法来执行这个中间步骤?

最佳答案

造成延迟的原因是您必须先将所有内容缓冲到 DataTable 中,然后再将其发送到服务器。为了获得更好的性能,您应该立即将记录发送到 SqlBulkCopy,并让该类使用自己的缓冲和批处理。

SqlBulkCopy 可以与 IDataReader 一起使用。所有 ADO.NET 数据读取器都实现此接口(interface),因此您可以将从任何数据读取器读取的数据推送到 SqlBulkCopy。

在其他情况下,假设您有对象的 IEnumerable,您可以使用 FastMember 中的 Marc Gravel 的 ObjectReader用于在 IEnumerable 之上创建 IDataReader 的包。此数据读取器不会一次加载所有内容,因此在 SqlBulkCopy 请求之前不会缓存数据:

复制 Marc Gravel 的示例:

IEnumerable<SomeType> data = ... 

using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}

关于c# - 有没有比使用 DataTable 更快的方法来使用 SqlBulkCopy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47207439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com