C# 调用ObjectContext.SaveChanges()是否会减小对象大小?
我有一个C# 调用ObjectContext.SaveChanges()是否会减小对象大小?,c#,entity-framework,entity-framework-4,C#,Entity Framework,Entity Framework 4,我有一个类级存储库,在一些表中插入行并填充它们的字段,我在一个for循环中这样做,循环中有10K个项目。因此,我仍然在哪里调用SaveChanges()。 我在想,只要在for loop的末尾调用SaveChanges()一次,然后立即保存它们。 但看起来在我的程序中,内存和崩溃都快用完了。我有16GB的RAM,资源监视器显示42%的内存正在使用。 因此,如果我在循环中每个项目的末尾调用SaveChanges(),而不是在整个循环的末尾调用,是否会使它的大小变小并有助于解决此内存问题?1)不要在
类
级存储库,在一些表中插入行并填充它们的字段,我在一个for循环
中这样做,循环中有10K个项目。因此,我仍然在哪里调用SaveChanges()
。
我在想,只要在for loop
的末尾调用SaveChanges()
一次,然后立即保存它们。
但看起来在我的程序中,内存和崩溃都快用完了。我有16GB的RAM,资源监视器显示42%的内存正在使用。
因此,如果我在循环中每个项目的末尾调用SaveChanges()
,而不是在整个循环的末尾调用,是否会使它的大小变小并有助于解决此内存问题?1)不要在每次迭代结束时调用SaveChanges(),这太慢了2) 检查此项
如果您可以使用SqlBulkCopy,它会非常快
还要检查您的应用程序是否以x86为目标,如果是,则无法访问超过2GB的数据(实际上小于2GB)否,这不会节省内存。 我建议在每次迭代后,调用
SaveChanges()
,将对象设置为null,并为下一次迭代创建一个新对象,以便:
foreach(kitten)
{
myRepo = new Repo();
//....creating records
myRepo.SaveChanges()
myRepo = null;
}
您是否尝试运行探查器以查看它是否运行?我的猜测是,它不会清除内存,因为它会缓存结果,但我可能是错的。一些显示一般流程的代码会很好。另外-您的数据库是否在本地计算机上运行,或者其他什么?如果它在本地计算机上运行,您确定DBMS没有占用所有内存吗?不过,42%的内存使用率听起来不足以导致崩溃。我已经把它放在了“AnyCPU”上。所以它是x86?取决于您的机器,这里和这里有更多信息