0
私は、Webサービスからのアイテムのリストを比較し、データベース上のローカルコピーを同期する同期メソッドを持っています。マルチスレッドEFコードで最適化を使用できます
このコードは機能し、うまく動作しますが、私は最適化できると感じています。私たちは20〜15の関連テーブルを持っている20万アイテムを扱っていますので、それほどの作業ではありませんが、通常は30〜60分かかることがあります。それは適切にすべてのコアを使用し、問題はありません。
このコードは、削除された項目を削除します。
var updatedListings = await _listingFeedService.GetListingsAsync();
Object lockContext = new Object();
var counter = 0; //Save changes every 300 listings
var parallelOptions = new ParallelOptions
{
MaxDegreeOfParallelism = Environment.ProcessorCount - 1
};
//1.- Delete sold listings
var soldListings = _listingRepo.GetSoldListings(updatedListings);
Parallel.ForEach(soldListings, parallelOptions, (sl) =>
{
try
{
lock (lockContext)
{
_listingRepo.DeleteByMlsId(sl);
counter++;
if (counter > 100)
{
_listingRepo.Save();
counter = 0;
}
}
}
catch (Exception e)
{
syncReport.AppendLine($"{System.DateTime.Now} - ListingId: {sl} Status:Error | Error: { e.Message}");
}
});
_listingRepo.Save();
このコードは
//3.- Save the new listings
var newListings = _listingRepo.GetNewListings(updatedListings);
counter = 0;
Parallel.ForEach(newListings, parallelOptions, newListingMlsId =>
{
try
{
Listing listingToUpdate;
listingToUpdate = _listingFeedService.GetListingByMlsIdAsync(newListingMlsId).Result;
lock (lockContext)
{
_listingRepo.Add(listingToUpdate);
if (listingToUpdate.MlsId != 0)
{
counter++;
if (counter > 50)
{
_listingRepo.Save();
counter = 0;
}
}
}
}
catch (Exception e)
{
syncReport.AppendLine($"{System.DateTime.Now} - ListingId: {newListingMlsId} Status:Error | Error: { e.Message}");
}
});
_listingRepo.Save();
これは、http://codereview.stackexchange.com/より適切です。 –
申し訳ありません。 – adam3039
さて、今のところ、コードレビューに属しています。一方、あなたが特定の問題を抱えていて助けが必要な場合は、ここで質問することができますが、解決しようとしている問題を正確に特定する必要があります。意味がありますか? –