外側のループ コードがないので、ここで暗闇の中で突き刺しています。タスクを保存する必要のない全体的な平均ランタイムを測定するだけの場合は、次のようなものを使用して、シリアル バージョンとパラレル バージョンを測定できます。
var iterations = 100;
var stopwatch = new Stopwatch();
// Run Serial version
stopwatch.Start();
for(int i = 0; i < iterations; i++)
{
for (int i = 0; i < 4; i++)
{
Console.WriteLine(tmp);
}
}
stopwatch.Stop();
var serialTime = stopwatch.ElapsedMilliseconds;
stopwatch.Reset();
// Run parallel version
stopwatch.Start();
for(int i = 0; i < iterations; i++)
{
Parallel.For(0,4, (i) => Console.WriteLine(i));
}
stopwatch.Stop();
var parallelTime = stopwatch.ElapsedMilliseconds;
Console.WriteLine("Serial took : {0}ms", serialTime / (double)iterations);
Console.WriteLine("Parallel took: {0}ms", parallelTime / (double)iterations);
ワークロードが非常に軽いため、これはスピードアップを測定するための優れたテストではない可能性があります。Thread.Sleep
より多くのオーバーヘッドまたはより多くの作業を模倣するようなもので関数を呼び出すことができます。また、C# でアムダールの法則の高速化を測定する方法については、 This StackOverflow Questionの私の回答も参照してください。