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?取决于您的机器,这里和这里有更多信息