TPL 似乎不会提高 MSDN 示例中的执行速度
本文关键字:速度 执行 MSDN TPL | 更新日期: 2023-09-27 18:20:13
当我使用MSDN的例子时:
var queryA = from num in numberList.AsParallel()
select ExpensiveFunction(num); //good for PLINQ
var queryB = from num in numberList.AsParallel()
where num % 2 > 0
select num; //not as good for PLINQ
我的示例程序:
static void Main(string[] args)
{
// ThreadPool.SetMinThreads(100, 100);
var numberList = new List<int>();
for (int i = 0; i <= 1000; i++)
{
numberList.Add(i);
}
Stopwatch sw = new Stopwatch();
sw.Start();
var queryA = from num in numberList
select ExpensiveFunction(num); //good for PLINQ
var c = queryA.ToList<int>();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
var queryB = from num in numberList.AsParallel()
select ExpensiveFunction(num); //good for PLINQ
c = queryB.ToList<int>();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.ReadKey();
}
static int ExpensiveFunction(int a)
{
a = a + 100 - 9 + 0 + 98;
// Console.WriteLine(a);
return a;
}
结果是:
7
41
为什么使用AsParallel()
比不使用它慢?
对于计算机来说,您的ExpensiveFunction
实际上并不是一个昂贵的功能。
简单的数学可以非常快速地完成。
也许试试Thread.Sleep(500);
。这将告诉CPU暂停半秒钟,这将模拟实际昂贵功能的效果。
编辑 — 我应该声明,它较慢的原因是因为并行处理所涉及的开销比实际计算更多的工作。请参阅此答案以获得更好的解释。