EF的内存消耗

问题描述:

早上好!EF的内存消耗

其实我正在玩EF 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? 或者是否有任何其他ORM与EF一样优雅?

编辑:
不,我不这样做那样的个性化......这只是用于显示:)

首先,我希望你没有真正做一个迭代像那样算; Count方法效率更高。但假设这只是演示代码来显示内存问题:

Change the MergeOption property of the ObjectQuery to NoTracking。这告诉实体框架你没有修改实体的意图,因此它不需要追踪它们的原始状态。

+1

工作就像魅力!谢谢你哦! – 2009-05-19 15:53:51