我有一个class
级别的存储库,并在一些表格中插入行并填充其字段,我在for-loop
中执行此操作,其中包含10K项。所以我还没有打电话给SaveChanges()
。
我想在SaveChanges()
结束时只调用for-loop
一次,并立即保存所有内容。
但看起来在我的程序中间它正在耗尽内存和崩溃。我有16GB的RAM和资源监视器显示42%正在使用。
因此,如果我在循环中的每个项目的末尾而不是在整个循环结束时调用SaveChanges()
,那么它是否会使其大小变小并帮助解决此内存问题?
答案 0 :(得分:1)
1)不要在每次迭代结束时调用SaveChanges(),它太慢了
2)检查这个
When should I call SaveChanges() when creating 1000's of Entity Framework objects? (like during an import)
如果你可以使用SqlBulkCopy,那就非常快
同时检查您的应用是否定位到x86,如果是,则无法访问超过2GB(实际上小于此值)
答案 1 :(得分:0)
不,这不会节省内存。
我建议在每次迭代后调用SaveChanges()
,将对象设置为null并为下一次迭代创建一个新对象,这样:
foreach(kitten)
{
myRepo = new Repo();
//....creating records
myRepo.SaveChanges()
myRepo = null;
}