Nib*_*Pig 1 c# sql-server sqlbulkcopy
我将大量记录加载到我的应用程序中(100万+)并对它们进行大量处理.处理要求它们都在内存中.
之后,我想将所有(现在已修改的)记录转储到空表中.
加载记录只需几秒钟,我最终得到了大量的MyRecord项目.
节省使用也SqlBulkCopy需要几秒钟.
但是SqlBulkCopy需要(我相信)a DataTable- 并将我的记录加载到一个DataTable缓慢的 - 每分钟约7500条记录使用
dataTable.Rows.Add(myRecord.Name, myRecord.Age, ....)
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来执行这个中间步骤?
导致延迟是因为您必须先将所有内容缓冲到DataTable中,然后再将其发送到服务器.为了获得更好的性能,您应该立即将记录发送到SqlBulkCopy,并让该类使用自己的缓冲和批处理.
SqlBulkCopy可以与IDataReader一起使用.所有ADO.NET数据读取器都实现此接口,因此您可以将从任何数据读取器读取的数据推送到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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2018 次 |
| 最近记录: |