Почему этот параллельный код медленнее, чем аналогичная непараллельная версия?

У меня есть следующий код (скопированный здесь из LINQPad). Очевидно, похоже, я не понимаю, как работает TPL или код является мусором, почему параллельная версия работает медленнее, чем ее непараллельная копия?

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);
}

Первые 10 результатов:

Параллельно: 0,1991644 Непараллельно: 0,0466178

Параллельно: 0,1723428 Непараллельно: 0,0447134

Параллельно: 0.1141791 Непараллельно: 0.0444557

Параллельно: 0,1758878 Непараллельно: 0,0444636

Параллельно: 0,1687637 Непараллельно: 0,0444338

Параллельно: 0,1677679 Непараллельно: 0,0445771

Параллельно: 0.1191462 Непараллельно: 0.0446116

Параллельно: 0,1702483 Непараллельно: 0,0454863

Параллельно: 0.1143605 Непараллельно: 0.0451731

Параллельно: 0,2155218 Непараллельно: 0,0450392

Ответы на вопрос(0)

Ваш ответ на вопрос