質問があります。入れ子並列性能質問
別のParallel.ForEachの中にParallel.Invokeを使用することのメリットはありますか?ここで
は私のコードです:
Parallel.ForEach(yearMonths,
() => new List<DJVSStatsCo>(),
(yearMonth, loopState, localDjvsStatsCo) =>
{
var coVintageCounter = 0;
var coExitsCounter = 0;
var coExtant = 0;
Parallel.Invoke(() =>
coVintageCounter = globalData.ValuationEventsPit.
Where(x => x.FirstRoundYearMonth <= yearMonth).
Select(x => x.CompanyId).Distinct().Count(),
() =>
coExitsCounter = globalData.ValuationEventsPit.
Where(x => x.ExitDate != null && x.ExitDateYearMonth == yearMonth).
Select(x => x.CompanyId).Distinct().Count(),
() =>
coExtant = globalData.ValuationEventsPit.
Where(x => x.FirstRoundYearMonth <= yearMonth && (x.ExitDate == null || x.ExitDateYearMonth > yearMonth)).
Select(x => x.CompanyId).Distinct().Count()
);
localDjvsStatsCo.Add(new DJVSStatsCo(yearMonth, coVintageCounter, coExtant, coExitsCounter));
return localDjvsStatsCo;
},
x =>
{
lock (locker)
{
djvsStatsCos.AddRange(x);
}
});
私はおよそ50Kレコードを持っているし、私のマシンは、2つのコアプロセッサを持っていると私は、ほぼ同じ結果を得ていますカルク時間を計算します。だから私の質問は、ParallelをParallelの中に使用することのメリットはあるのだろうか?これのベストプラクティスは何ですか?
ありがとうございます。
よろしくお願いいたします。 Vlad。
両方のケースで同じスループットを得るなら、 'Parallel.Invoke'でコードを複雑にする理由はありません。言い換えれば、* less * parallelがすでにCPUを飽和させている場合は、*より多くの*並列を作るためのボーナスポイントは得られません。ポイントを失うことさえあります! –