[英]Entity Framework query outofmemoryexception
我是.NET实体框架的新手,我正在尝试迭代数百万行的表中的记录。 这是基本代码:
// 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;
您当前看到的内存分配在数据上下文中 - 一旦您处置了上下文,这个内存最终会被垃圾收集,因此您可以在使用块内实现较小批量的行或手动处理对象上下文以回收内存每批之间。
至于更改查询,可以添加where子句来减少返回的记录:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.