为什么Parallel Sum比连续的对应慢?

时间:2014-06-15 08:11:14

标签: c# linq parallel-processing plinq

我写了一个小程序来检查Sum()枚举AsParallel()的性能(即PLINQ)。

首先,我生成一个IEnumerable。范围不是特别大,因为LINQ Sum() would result in an overflow

IEnumerable<int> range = Enumerable.Range(1, 30000);

我的第一个基准测试是使用常规循环执行的:

var stopwatch = new Stopwatch();
stopwatch.Start();
int total = 0;
foreach(int x in range)
{
    total += x;
}
stopwatch.Stop();

Console.WriteLine("Sum 1: {0}; time: {1}", total, stopwatch.Elapsed);

我的第二个基准使用LINQ Sum()

stopwatch.Restart();
int total2 = range.Sum();
stopwatch.Stop();

Console.WriteLine("Sum 2: {0}; time: {1}", total2, stopwatch.Elapsed);

我的第三个基准使用了PLINQ Sum()

stopwatch.Restart();
int total3 = range.AsParallel().Sum();
stopwatch.Stop();

Console.WriteLine("Sum 3: {0}; time: {1}", total3, stopwatch.Elapsed);

以下是一些结果:

Sum 1: 450015000; time: 00:00:00.0004210
Sum 2: 450015000; time: 00:00:00.0003545
Sum 3: 450015000; time: 00:00:00.0427375

为什么PLINQ版本(Sum 3)比其他版本慢得多?另外,为什么LINQ Sum()(Sum 2)比普通循环(Sum 1)更快?

0 个答案:

没有答案