为什么Parallel.ForEach不运行多个线程?

zzf*_*ima 22 c# parallel-processing

今天我尝试做一些优化foreach声明,这可以继续XDocument.

优化前:

foreach (XElement elem in xDoc.Descendants("APSEvent").ToList())
{
    //some operations
}
Run Code Online (Sandbox Code Playgroud)

优化后:

Parallel.ForEach(xDoc.Descendants("APSEvent").ToList(), elem =>
{
    //same operations
});
Run Code Online (Sandbox Code Playgroud)

我看到.NET Parallel.ForEach(...)只打开一个线程!结果,时间跨度Parallel大于标准foreach.

为什么你认为.NET只开了1个线程?因为锁定文件?谢谢

gra*_*eot 15

通过设计,Parallel.ForEach可以使用比请求更少的线程来实现更好的性能.根据MSDN [link]:

默认情况下,Parallel.ForEach和Parallel.For方法可以使用可变数量的任务.这就是为什么,例如,ParallelOptions类具有MaxDegreeOfParallelism属性而不是"MinDegreeOfParallelism"属性.这个想法是系统可以使用比请求处理循环更少的线程.

.NET线程池通过允许并行任务的工作线程数随时间变化而动态适应不断变化的工作负载.在运行时,系统会观察增加线程数是否会改善或降低整体吞吐量并相应地调整工作线程数.


归档时间:

查看次数:

22157 次

最近记录:

7 年,11 月 前