Vla*_*den 4 .net c# parallel-processing multithreading task-parallel-library
我有问题.
在另一个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);
}
});
Run Code Online (Sandbox Code Playgroud)
我有大约50K记录,我的机器有2个核心处理器和计算计算时间我得到几乎相同的结果.所以我的问题是在Parallel内部使用Parallel有什么好处吗?这是什么最好的做法?
非常感谢.
弗拉德.
在这种情况下,可能没有任何好处.有可能是的情况下的好处,你有相对较少的"外"的工作,但许多潜在的"内"的工作.
另一方面,它还取决于这三个工作正在做什么.如果它们本质上是可以并行执行的异步任务(例如在数据库上),那么确定......但如果它们是本地 CPU密集型任务,那么你可能只是为调度程序提供额外的工作.没有真正的好处.
考虑到你的代码外观,我觉得你很可能从执行单个查询(或者可能是三个)中受益,然后通过分组yearMonth
...
归档时间: |
|
查看次数: |
903 次 |
最近记录: |