コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】Parallel.ForEach で Partitioner.Create を使用する場合の処理速度検証

検証用スクリプト

using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Threading.Tasks;

internal static class Program
{
    private static void Main()
    {
        var count = 1000000000;
        
        var rangePartitioner = Partitioner.Create( 0, count );

        var sw1 = new Stopwatch();
        sw1.Start();
        
        for ( int i = 0; i < count; i++ )
        {
        }

        sw1.Stop();
        Console.WriteLine( sw1.Elapsed.TotalSeconds );

        var sw2 = new Stopwatch();
        sw2.Start();
        
        Parallel.ForEach
        (
            rangePartitioner, ( range, loopState ) =>
            {
                for ( int i = range.Item1; i < range.Item2; i++ )
                {
                }
            }
        );

        sw2.Stop();
        Console.WriteLine( sw2.Elapsed.TotalSeconds );
    }
}

検証結果

  for Partitioner.Create
100,000 回 0.000158 秒 0.001174 秒
10,000,000 回 0.015897 秒 0.006757 秒
1,000,000,000 回 1.678962 秒 0.578945 秒

参考サイト様