2010-08-30 96 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