mde*_*272 6 .net c# linq-to-entities entity-framework-4
我是.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
}
Run Code Online (Sandbox Code Playgroud)
在迭代数据时,我得到了"outofmemoryexception".有什么方法可以改变我的查询或管理ObjectQuery实例的内存?
我怀疑问题在于实体框架正在尝试缓存/跟踪对象上下文中的所有这些数据,如果数据集很大,这最终会导致 OutOfMemory 异常。
您可以手动关闭跟踪以避免这种情况:
dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking;
Run Code Online (Sandbox Code Playgroud)
您当前看到的分配的内存位于数据上下文中 - 一旦您处置上下文,该内存最终将被垃圾收集,因此您也可以在 using 块内具体化小批量的行,或者手动处置对象上下文以回收内存每批次之间。