我在代码中使用Parallel.ForEach和PLINQ的次数越多,得到的面孔和代码审查的支持就越多。所以我想知道我是否有理由在每个LINQ语句上不使用PLINQ?运行时是否不够聪明,无法开始产生这么多线程(或从线程池中消耗了这么多线程),以至于应用程序性能实际上会下降而不是提高?同样的问题也适用于并行库。

我确实了解与线程安全和使用多线程的开销有关的含义。我还意识到并不是所有的东西都适合并行化。我只想知道我是否应该停止捍卫自己的方法,而只放弃这两个好东西,因为我的同龄人认为我最好自己进行线程控制而不是依赖.NET工具?

更新:请假定硬件足够好,可以满足使用多线程的先决条件。

最佳答案

要设置工作线程的数量,可以使用.WithDegreeOfParallelism(N)

例如

var query = from item in source.AsParallel().WithDegreeOfParallelism(2)
            where Compute(item) > 42
            select item;

参见http://msdn.microsoft.com/en-us/library/dd997425.aspx

关于c# - .NET 4 Parallel.ForEach和PLINQ : can they overwhelm the thread pool and kill the app performance?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9857819/

10-12 17:49