2009-05-19 17 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これはEntity Frameworkに、エンティティを変更する意思がないことを伝えるため、元の状態を把握する必要はありません。

+1

チャームのように働いた!あなたにすっごくありがとう! –