I have the following code (copied here from LINQPad). Obviously it looks like I am not understanding how TPL works or the code is garbage, why does the parallel version run slower than its non-parallel counterpart?
for (int i = 0; i < 100; i++)
{
ParallelOptions ops = new ParallelOptions();
ops.MaxDegreeOfParallelism = Environment.ProcessorCount;
var watch = Stopwatch.StartNew();
Parallel.ForEach<int>(Enumerable.Range(1, 10000000), ops, x => { int y = x + 1; });
watch.Stop();
Console.WriteLine("Parallel: {0}", watch.Elapsed.TotalSeconds);
watch = Stopwatch.StartNew();
foreach (var x in Enumerable.Range(1, 10000000))
{
int y = x + 1;
}
watch.Stop();
Console.WriteLine("Non-parallel: {0}\n", watch.Elapsed.TotalSeconds);
}
First 10 results:
Parallel: 0.1991644 Non-parallel: 0.0466178
Parallel: 0.1723428 Non-parallel: 0.0447134
Parallel: 0.1141791 Non-parallel: 0.0444557
Parallel: 0.1758878 Non-parallel: 0.0444636
Parallel: 0.1687637 Non-parallel: 0.0444338
Parallel: 0.1677679 Non-parallel: 0.0445771
Parallel: 0.1191462 Non-parallel: 0.0446116
Parallel: 0.1702483 Non-parallel: 0.0454863
Parallel: 0.1143605 Non-parallel: 0.0451731
Parallel: 0.2155218 Non-parallel: 0.0450392