2010-08-30 91 views
2

在分析我的代码后,我在更大的循环内有以下代码我发现在完成Stop()方法需要很长时间后,所有Parallel.For增益的执行速度都会丢失。有什么办法可以改善吗?也许打电话Thread.Sleep()Slow Parallel.For中断

谢谢。

Parallel.For(0, 1000, (i, loopState) => 
{ 
    if (a == b) 
     loopState.Stop(); 
}); 
+1

请添加代码外循环。另外请记住,Stop()可能正在等待所有线程加入? (我在这里猜测)。 – 2010-08-30 11:01:15

+1

这不是我的经验,在任何情况下,我都希望Parallel.For针对并行执行进行优化,而不是快速取消。 – 2010-08-30 11:14:53

+0

你的代码在做什么?你提供的作品是无用的。什么是a和b,什么是1000?请发布更多的代码和描述 – Andrey 2010-08-30 11:19:22

回答

3

我认为你应该使用loopState.Break()的方法,因为它是为相同常关键字breakStop方法设置IsStopped标志,以便其他迭代可以检查此标志并在方便时停止。它不会停止循环。

请参阅MSDN上

StopBreak
+0

这是正确答案!停止是合作的,意味着如果IsStopped返回true,线程应该手动停止。休息对所有人都是必要的,不需要合作。 – Andrey 2010-08-30 11:23:07

+0

停止()应该会更快,因为你可以在这里查看:msdn.microsoft.com/en-us/library/dd782827.aspx – abenci 2010-08-30 12:16:41

+1

@devdept:可能是,但你必须编写代码来为它的池IsStopped标志工作。打破只是工作。不要背离语境。 – 2010-08-30 12:17:27