【问题标题】:System.OutOfMemoryException thrown for large table in EFEF 中的大表引发 System.OutOfMemoryException
【发布时间】:2014-09-05 04:46:06
【问题描述】:

这可能是一个简单或快速提出的问题。

在我的 EF 应用程序中出现异常。

System.OutOfMemoryException:类型异常 'System.OutOfMemoryException' 被抛出。

我正在尝试根据 idList (int)Log 表中检索记录。 Logs 表有数百万条记录。如何修复这个异常或者如何优化代码来解决这个问题?

    var resultList = idList.Join(clientEntities.Logs,
                                 x => x,
                                 s => s.ID,
                                 (x, s) => s)

    foreach (var r in resultList)
    {
        ...
    }

执行循环时抛出异常。

【问题讨论】:

  • OutOfMemory 异常非常难以调试,尤其是当我们看不到正在使用的其他代码时。 foreach 内部发生了什么?
  • 您可以选择使用分页吗?
  • @MatthewHaugen- 它甚至没有进入 foreach。
  • 我认为正确的建议是在这里使用分页。每次调用将查询限制为 N(即 1000)行。您是否在查询的 and 处调用 ToList()?
  • 不能保证防止内存异常,但确实可以提高性能,试试clientEntities.Logs.AsNoTracking()

标签: c# entity-framework


【解决方案1】:

我认为对你来说最好的选择是使用分页。你可以通过使用分页来限制记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2015-07-12
    • 1970-01-01
    • 2010-11-12
    • 2013-01-14
    相关资源
    最近更新 更多