gpt4 book ai didi

c# - Parallel.For 循环执行速度比 for 慢

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:21 25 4
gpt4 key购买 nike

我写了两个简单的循环。

一个是使用标准的“for”:

Stopwatch sw = Stopwatch.StartNew(); 

for (int i = 0; i < 1000000; i++)
{
Console.WriteLine(i);
}
sw.Stop();
Console.WriteLine(sw.Elapsed);
Console.ReadKey();

其次是使用 Parrallel.For,它应该更快:

sw.Restart();
Parallel.For(0,1000000,i =>
{
Console.WriteLine(i);
});

sw.Stop();
Console.WriteLine(sw.Elapsed);

不幸的是,第一个执行大约需要 53 秒,第二个大约需要 1 分 50 秒 (!!!)。

为什么会这样,我做错了什么?

最佳答案

Parallel.For 不应该使循环更快。它应该使其迭代并行执行

在您的尝试中,您使用的代码使用的资源无法匹配通过并行化循环提供的任何速度提升(可能是因为它们需要同步,可能是因为没有足够的带宽,等等)。因此,您只是让线程争夺无法跟上它们的资源。您的场景根本不需要并行性(至少不是您尝试的方式)。

如果您想了解 Parallel.For 如何提高循环的性能,请考虑在循环内进行一些计算,将结果保存到独占(对于每次迭代)索引在数组中并确保这些计算不以任何方式依赖于其他迭代的结果。

关于c# - Parallel.For 循环执行速度比 for 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16457918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com