【发布时间】:2014-10-03 05:18:22
【问题描述】:
我想做如下的事情:
int firstLoopMaxThreads = 1; // or -1
int secondLoopMaxThreads = firstLoopMaxThreads == 1 ? -1 : 1;
Parallel.For(0, m, new ParallelOptions() { MaxDegreeOfParallelism = firstLoopMaxThreads }, i =>
{
//do some processor and/or memory-intensive stuff
Parallel.For(0, n, new ParallelOptions() { MaxDegreeOfParallelism = secondLoopMaxThreads }, j =>
{
//do some other processor and/or memory-intensive stuff
});
});
在性能方面,当 secondLoopMaxThreads = 1 时,将内部 Parallel.For 循环与普通 for 循环交换是否值得?常规 for 循环和 MaxDegreeofParallelism = 1 的 Parallel.For 循环之间的性能差异是什么?
【问题讨论】:
-
AFAIK 唯一的区别是
Parallel.For循环将被安排在线程池线程上运行(这可能会产生一些调度开销)。除此之外,循环体在两种情况下都应该表现得同样好。 ICBWT。 -
旁注:请务必查看 Eric Lippert 的 Which is faster,以使 [性能] 问题变得更好......
-
它是否值得主要取决于您在这种情况下对性能的关心程度。这不是我们可以告诉你的。不同的性能可能足够重要,也可能不重要。只有你能回答这个问题。
标签: c# performance task-parallel-library