約500万行のデータベースがあります。データベース用の XML 文字列を生成してサービスにプッシュしようとしています。これを一度に 1 つずつ行う代わりに、サービスは一度に 1000 レコードの取得をサポートします。現時点では、これは非常に遅く、1000 レコードあたり 10 秒以上かかります (データベースへの書き込みとサービスへのアップロードを含む)。
次のコードを機能させようとしましたが、失敗しました...試してみるとクラッシュします。何か案は?
var data = <insert LINQ query here>
int take = 1000
int left = data.Count();
Parallel.For(0, left / 1000, i =>
{
data.Skip(i*1000).Take(1000)...
//Generate XML here.
//Write to service here...
//Mark items in database as generated.
});
//Get companies which are still marked as not generated.
//Create XML.
//Write to Service.
インデックスが範囲外であることを示すクラッシュが発生します。が 500 万の場合left
、ループ内の数は 5000 を超えないようにする必要があります。これに 1000 を掛けても、500 万を超えることはありません。少しの間は機能し、その後失敗してもかまいませんが、SQL クエリの後で失敗するだけです。