私は非常に大きなデータセット、約 200 万レコードを扱っています。以下のコードがありますが、約 3 つのバッチ、約 600,000 レコードを処理した後、メモリ不足の例外が発生します。各バッチ エンティティ フレームワークの遅延ロードをループするときに、200 万件のレコード全体をメモリに構築しようとしていることを理解しています。処理したバッチをアンロードする方法はありますか?
ModelContext dbContext = new ModelContext();
IEnumerable<IEnumerable<Town>> towns = dbContext.Towns.OrderBy(t => t.TownID).Batch(200000);
foreach (var batch in towns)
{
SearchClient.Instance.IndexMany(batch, SearchClient.Instance.Settings.DefaultIndex, "Town", new SimpleBulkParameters() { Refresh = false });
}
注: バッチ メソッドは、このプロジェクトから来ています: https://code.google.com/p/morelinq/
検索クライアントはこれです: https://github.com/Mpdreamz/NEST