EF的内存消耗

时间:2009-05-19 05:51:53

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

早上好!

其实我正在玩EF atm一点点,我需要你的帮助:
以下场景:我有一个包含大量数据的表。如果我通过EF查询该表,则所有记录都会加载到内存中。

例如

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

因此,我浏览MySpecialTable的所有记录并计算counter。 当我看看Taskmanager,或其他任何向我显示我的应用程序的内存消耗时,它告诉我:400Mb。 (因为数据)
如果我再次在表中运行,内存消耗将增加一倍。

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

为什么每次运行的所有记录都存储在内存中(并且未发布)? 他们在哪里存储? 有没有办法让EF查询像DataReader一样? 或者还有其他任何与EF一样优雅的ORM吗?

修改
不,我没有做那样的计数......这只是为了展示迭代:)

1 个答案:

答案 0 :(得分:1)

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

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