[英]Bulk Operations with SQL CE / LINQ
我正在尝试编写一个程序,以将大量数据从旧版SQL Express系统转换为基于SQL CE的较新系统。 以下是发生的情况的快速快照:
对于较小的表,我可以使用LINQ很好-但是较大的表给我带来了问题。 标准方式:
foreach(var dataRow in ...)
{
table.InsertOnSubmit(dataRow);
}
database.SubmitChanges();
非常缓慢,需要几个小时才能完成。 我什至尝试执行一些简单的“批量”操作来尝试消除循环末尾的一个巨大插入,即:
foreach(var dataRow in ...)
{
if(count == BULK_LIMIT)
{
count = 0;
database.SubmitChanges();
}
count++;
table.InsertOnSubmit(dataRow);
}
// Final submit, to catch the last BULK_LIMIT item block
database.SubmitChanges();
我尝试了各种散装尺寸,从相对较小的值(如1K-5K)到较大的尺寸(最大为300K)。
最终,我陷入了困境,无论批量大小如何,该过程花费的时间大致相同(几个小时)。
所以-有人知道提高速度的方法吗? 典型的解决方案是使用SqlBulkCopy,但这与SQL CE不兼容。
一些注意事项:
在此先感谢-感谢您的帮助!
-丹
使用参数化的INSERT语句:准备命令,在循环中设置参数值,并对每个INSERT重用同一命令。
执行所有INSERT后,请删除所有索引并重新应用。
更新 :Chris Tacke在这里使用SqlCeResultset具有最快的解决方案: SQLCE中的批量插入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.