entity .ToList()生成一个System.OutOfMemoryException

我有一张五十万行的表。 我需要更新每一行,但ToList()失败:

List allContacts = objDatabase.Contacts.ToList(); 

我每次都得到一个System.OutOfMemoryException。 有没有解决的办法?

我已经有了App.Config的解决方法,但仍然没有去:

  

我是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(); } } 

随意玩大块的大小。 块越大,整个过程应该越快,但它将占用更多内存。

怎么样

 IEnumerable allContacts = objDatabase.Contacts.AsEnumerable(); 

永远不要将allContacts转换为列表。 只需使用就像一个枚举器并应用Foreach循环来访问每个联系人。

尝试

 foreach (Contacts c in objDatabase.Contacts) c.value = newvalue;