这是我的示例项目:
Console.WriteLine("Elapsed time in milliseconds:");
swSingle.Start();
var numbers2 = Enumerable.Range(0, 100000000);
var singleResult = numbers2
.Where(i => i % 2 == 0)
.ToArray();
swSingle.Stop();
Console.WriteLine("Without AsParallel: {0}", swSingle.ElapsedMilliseconds);
swParallel.Start();
var numbers = Enumerable.Range(0, 100000000);
var parallelResult = numbers.AsParallel()
.Where(i => i % 2 == 0)
.ToArray();
swParallel.Stop();
Console.WriteLine("Using AsParallel: {0}", swParallel.ElapsedMilliseconds);
我的(多核)系统的输出是:
Elapsed time in milliseconds:
Without AsParallel: 1537
Using AsParallel: 2135
为什么我不能在这个样本中获得时间优势 使用AsParallel?似乎更糟糕的是 很开销。
答案 0 :(得分:4)
使代码并行运行(创建任务,计划和运行)需要花费更多时间,而不是通过并行执行代码获得的优势。
也就是说,这非常清楚并非每个代码都能并行运行。您只能在具有高CPU负载或外部I / O(如HTTP请求)的实质代码段上使用它。
答案 1 :(得分:1)
模运算需要O(1)时间,因为它被认为是一个简单的动作。使用Linq,你会得到O(n)复杂度(你实际上遍历所有东西),这仍然不是那么复杂。
当您使用.AsParallel
运行您的func时,您只需为操作添加更多开销。
尝试使用实际需要多个CPU内核的更复杂的功能和/或任务,以便您可以看到明显的差异。