我正在做大量的导入,并且只做了一个.SubmitChanges(),只有1,000条记录。
示例:
var targetRecord = new Data.User() { FirstName = sourceRecord.FirstName };
db.Users.InsertOnSubmit(record);对于源数据库中的每条记录,上述操作都是在一个循环中进行的。然后,后来..。
if (i % 1000 == 0) { db.SubmitChanges(); }问题是,当我想在每个SubmitChanges()之后清除它们时,要插入的项的集合会变得越来越大;
我要找的是:
if (i % 1000 == 0) { db.SubmitChanges(); db.Dispose_InsertOnSubmit_Records(); }差不多吧。我也可以将数据记录列表存储在一个局部变量中,并在提交更改后不断重新实例化该变量,但这需要更多的代码。
希望这是有意义的。谢谢!
发布于 2011-08-26 23:58:43
您可以在每个SubmitChanges之后初始化一个新的DataContext。我不确定性能的影响,但我在过去做过类似的事情,没有任何问题。
我所见过的唯一另一个解决方案是遍历您的更改并还原它们。前者似乎是一种更有效的方法。
发布于 2011-08-28 03:23:09
嗯,我担心massive和linq-to-sql不能一起使用。它不是为批处理而设计的。
如果您所做的只是一个直接导入(您的示例表明了这一点),那么您最好使用SqlBulkCopy。这是更快的数量级。同样,更多的代码,但如果你正在寻找速度,没有更好的解决方案。
https://stackoverflow.com/questions/7207388
复制相似问题