2011-07-26 171 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