我有一个包含 50 万行的表。我需要更新每一行,但 ToList() 失败:
List<Contacts> allContacts = objDatabase.Contacts.ToList();
我每次都会收到 System.OutOfMemoryException 。有没有解决的办法?
我已经有了 App.Config 解决方法,但仍然不行:
<gcAllowVeryLargeObjects enabled="true" />
我的机器是 64 位,内存为 8GB
这是使用分块的解决方案。它将在每个块之后处理容器(和下载的实体)。 GC 应该在系统内存耗尽之前释放内存。
int chunkSize = 50;
int curCount = 0;
while (true)
{
using (var db = new DbEntities())
{
var chunk = db.Contacts.Skip(curCount).Take(chunkSize).ToArray();
curCount += chunkSize;
if (chunk.Length == 0) break;
foreach (var contact in chunk)
{
//do any work for the contact here
contact.Something = "SomethingNew";
}
db.SaveChanges();
}
}
随意调整块大小。块越大,整个过程应该越快,但会占用更多内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)