【问题标题】:Memory consumption of EFEF的内存消耗
【发布时间】:2010-10-27 05:43:42
【问题描述】:

早上好!

实际上,我正在玩一些 EF atm,我需要你们的帮助:
以下场景:我有一张表,里面有很多数据。如果我通过 EF 查询此表,所有记录都会加载到内存中。

例如。

var counter = default(int);
using (var myEntities = new MyEntities())
{
    foreach (var record in myEntities.MySpecialTable)
    {
        counter++;
    }
}

所以,我遍历了 MySpecialTable 的所有记录并计数了counter。 当我查看任务管理器或任何其他显示我的应用程序内存消耗的东西时,它告诉我:400Mb。 (因为数据)
如果我再跑一遍表,内存消耗会增加一倍。

我已经尝试调用 GC,但它不起作用。

为什么每次运行的所有记录都存储在内存中的某个位置(并且没有被释放)? 它们存储在哪里? 有没有办法让 EF 查询表现得像 DataReader? 或者还有其他像EF一样优雅的ORM吗?

编辑:
不,我没有做那样的计数......这只是为了显示迭代:)

【问题讨论】:

    标签: c# .net entity-framework .net-3.5


    【解决方案1】:

    首先,我希望您实际上并没有那样做计数; Count 方法效率更高。但假设这只是演示内存问题的演示代码:

    Change the MergeOption property of the ObjectQuery to NoTracking。这告诉实体框架您无意修改实体,因此它无需费心跟踪它们的原始状态。

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 2011-12-13
      • 2011-10-03
      • 2012-11-24
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多