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

[エンティティフレームワークの大きなデータセット、メモリ不足の例外]の可能な複製(http://stackoverflow.com/questions/18169859/entity-framework-large-data-set-out-of-memory-exception) –

答えて

4

私は問題はEntity Frameworkのは、あなたにこのすべてのデータを追跡/キャッシュしようとしていることである疑いがありますデータ・セットが巨大である場合、最終的にOutOfMemory例外が発生します。

あなたはこれを回避するために、手動でオフ追跡回すことができます。

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

あなたが現在見ていることに割り当てられたメモリは、データコンテキスト内にある - あなたは、コンテキストを破棄たら、このメモリは、最終的にはゴミが収集されますので、代わりに使用しているブロックの中にある小さなバッチのバッチを実体化するか、手動で各バッチ間のメモリを再利用するためにオブジェクトコンテキストを配置することができます。

+1

MergeOption to NoTrackingは問題を修正しました。ありがとうございました。 – mdeangelo272

+0

この設定はどこで設定しますか?どのクラスに? – jairhumberto

関連する問題