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。这告诉实体框架你没有修改实体的意图,因此它不需要追踪它们的原始状态。
工作就像魅力!谢谢你哦! – 2009-05-19 15:53:51