2009-05-19 2 views
2

안녕하세요!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처럼 작동시키는 방법이 있습니까? EF만큼 우아한 ORM이 있습니까?

편집 :
아니, 난 그런 수를 안할거야 ...이 단지 모든

답변

1

첫째, 당신이 실제로 일을하지 않는 희망 : 반복을 보여주는 그것 같이 센다; Count 메서드가 훨씬 효율적입니다. 하지만 이것을 가정하면 메모리 문제를 보여주는 데모 코드 일뿐입니다 :

Change the MergeOption property of the ObjectQuery to NoTracking. 이것은 엔티티 프레임 워크에 엔티티를 수정할 의도가 없다는 것을 알려주기 때문에 원래 상태를 계속 추적 할 필요가 없습니다.

+1

님께 서 같은 매력적인 작품을 만드세요! 정말 감사합니다! –

관련 문제