【问题标题】:Entity Framework query outofmemoryexception实体框架查询内存不足异常
【发布时间】:2011-07-27 04:56:45
【问题描述】:

我是 .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
}

在遍历数据时,我得到一个“内存不足异常”。有什么方法可以改变我的查询或管理 ObjectQuery 实例的内存吗?

【问题讨论】:

标签: c# .net entity-framework-4 linq-to-entities


【解决方案1】:

我怀疑问题是实体框架试图缓存/跟踪对象上下文中的所有这些数据,如果数据集很大,最终会导致 OutOfMemory 异常。

您可以手动关闭跟踪以避免这种情况:

dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking;

您当前看到的分配的内存在数据上下文中 - 一旦您处理上下文,此内存最终将被垃圾收集,因此您可以在 using 块内实现更小批量的行或手动将对象上下文处理为回收每批之间的内存。

【讨论】:

  • 将 MergeOption 设置为 NoTracking 解决了该问题。谢谢。
  • 我在哪里设置这个配置?在哪个班?
【解决方案2】:

至于更改您的查询,您可以添加一个 where 子句来减少返回的记录:

http://msdn.microsoft.com/en-us/library/bb311043.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多