gpt4 book ai didi

c# - 出奇地慢 : what happened when TakeWhile met AsParallel?

转载 作者:行者123 更新时间:2023-11-30 14:30:05 26 4
gpt4 key购买 nike

我知道错误使用 linq 可能会导致性能下降,但这一次太奇怪了。

当我调用“AsParallel.TakeWhile.AsParallel.ForAll”时,它比“AsParallel.TakeWhile.ForAll”慢很多。谁能解释一下为什么?

using System;
using System.Diagnostics;
using System.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Action<int> doNothing = i => { };

var stopwatch = Stopwatch.StartNew();
Enumerable.Range(1, 100).AsParallel().TakeWhile(m => m < 10)
.ForAll(doNothing);
var ticks1 = stopwatch.ElapsedTicks;

stopwatch.Restart();
Enumerable.Range(1, 100).AsParallel().TakeWhile(m => m < 10)
.AsParallel() // spend much more time with this AsParallel
.ForAll(doNothing);
var ticks2 = stopwatch.ElapsedTicks;

Console.WriteLine("ticks without AsParallel: {0}\r\n with AsParallel: {1}", ticks1, ticks2);
//ticks without AsParallel: 87956
//with AsParallel: 6688708
Console.Read();
}
}
}

最佳答案

当您调用 AsParallel 时,框架开始将工作分成更小的部分,这些部分可以安排在不同的核心上。这些部分稍后需要合并回结果中。这会导致一些开销。

您已经通过第一个“AsParallel”使查询并行,当您第二次调用它时,分区再次发生,导致更多的开销,但没有给您带来性能提升。

参见 Understanding Speedup in PLINQ获取更多信息。

关于c# - 出奇地慢 : what happened when TakeWhile met AsParallel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322683/

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