作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道错误使用 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/
我是一名优秀的程序员,十分优秀!