バッチ処理等で大量データなどを出力する場合、 LINQ to Entity や EntitySQL ObjectQuery では一端データをメモリにため込んでしまうため、パフォーマンスに問題が発生する可能性があります。
その場合は、 EntityClient 名前空間のクラス EntityDataReader を使用して データソースに順次アクセス(Forward-Only) することで、メモリの消費を抑えることができます。
動作の確認は、.NET3.5SP1のEntityFramework1 を使用しています。
下の例では Accountというエンティティの一覧を取得して、コンソールに出力しています。EntityCommandに指定するのはEntitySQLです。
static void EntityDataReaderTest()
{
using (EntityConnection cn = new EntityConnection("name=TestEntities"))
{
string sql = "SELECT VALUE Account from TestEntities.Account";
EntityCommand cmd = cn.CreateCommand();
cmd.CommandText = sql;
cmd.CommandType = System.Data.CommandType.Text;
cn.Open();
using (EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
while (reader.Read())
{
Console.WriteLine(reader["name"] as string);
}
}
}
}
説明は以上です。指摘点などありましたらご連絡ください。