为何并行。 ForEach与Foreach同时进行

时间:2015-05-31 14:31:58

标签: c# multithreading

我写了一个算法来解决数独谜题。 现在我必须阅读大约100个数独游戏并解决它们。

基本上我只是阅读2d数组中的所有问题并遍历每个问题来解决它们。

foreach (var problem in problems)
            {
                Solve(problem);  // Solve is a static method
            }

如果我用以下代码替换上面的代码:

Parallel.ForEach(problems, problem => Solve(problem));

我没有做出相当大的改进。我的机器中有2个核心。 我错过了什么,我是否必须做其他事情以确保我的算法是并行的并使用所有内核。

2 个答案:

答案 0 :(得分:4)

设置和管理并行任务需要一些开销。这种开销会抵消你在解决问题时所取得的一些成果。如果代码执行得足够快,那么这种开销可能会占据执行时间。此外,对于2个内核,您只希望看到最好的2倍改进(一半时间),因为在任何给定时间只能处理2个问题。如果没有关于您的性能或代码的任何信息,很难说是否有任何导致它无法并行运行的事情(例如,您是否有强制执行串行执行的关键部分)。

答案 1 :(得分:2)

我同意@tvanfosson。另一种可能性是你有两个内核,所以你的一个内核用于你的IDE等其他东西,至少不是100%可用来克服并行的开销