2011-07-26 174 views
6

我是新来的.NET实体框架,并试图遍历数百万行的表中的记录。以下是基本代码:实体框架查询outofmemoryexception

// select the records from the database 
var records = from data in dataContext.Messages 
       select data; 

// iterate over the messages 
foreach (var record in records) 
{ 
    // do nothing 
} 

在遍历数据时,我得到'outofmemoryexception'。有什么方法可以改变我的查询或管理ObjectQuery实例的内存吗?

+0

你在那个迭代里面做了什么? – Tigran

+0

[实体框架大型数据集,内存不足异常]的可能重复(http://stackoverflow.com/questions/18169859/entity-framework-large-data-set-out-of-memory-exception) –

回答

4

我怀疑的问题是,实体框架试图缓存/跟踪所有这些数据的对象上下文,如果数据集很大,最终会导致OutOfMemory异常。

您可以打开跟踪手动关闭,以避免这种情况:

dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking; 

分配您目前看到的内存中的数据范围内 - 这记忆终将一旦处置方面得到垃圾收集,所以交替您可以在使用块内实现更小批次的行,或手动处理对象上下文以回收每批之间的内存。

+1

设置MergeOption到NoTracking解决了这个问题。谢谢。 – mdeangelo272

+0

我在哪里设置此配置?在哪个级别? – jairhumberto