我是 .NET Entity Framework 的新手,正在尝试遍历具有几百万行的表中的记录。这是基本代码:
// select the records from the database
var records = from data in dataContext.Messages
select data;
// iterate over the messages
foreach (var record in records)
{
// do nothing
}
在遍历数据时,我得到了“outofmemoryexception”。有什么方法可以改变我的查询或管理 ObjectQuery 实例的内存吗?
最佳答案
我怀疑问题是 Entity Framework 试图在您的对象上下文中缓存/跟踪所有这些数据,如果数据集很大,这最终会导致 OutOfMemory 异常。
您可以手动关闭跟踪以避免这种情况:
dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking;
您当前看到的分配的内存在数据上下文中 - 一旦您处理上下文,此内存最终将被垃圾收集,因此您可以在 using block 内具体化较小的行批处理或手动将对象上下文处理为回收每批之间的内存。
关于c# - Entity Framework 查询outofmemoryexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836152/