2011-07-26 4 views
6

저는 .NET Entity Framework에 익숙하지 않고 수백만 행이 포함 된 테이블의 레코드를 반복합니다. 기본 코드는 다음과 같습니다.엔티티 프레임 워크 쿼리 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

[Entity Framework 큰 데이터 집합, 메모리 부족 예외] 가능한 복제본 (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