うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【C#】for と Enumerable のパフォーマンスを調べる

下記コードを実行して速度等を見てみる
ループの上限が60000なのは Enumerable.Range 側で大きい値を入れると
OverflowException: Arithmetic operation resulted in an overflow. のエラーが出てしまったため

   private void Start()
    {
        Profiler.BeginSample("ForProfile");
        var sum = 0;
        for(int i = 0; i < 60000; i ++)
            sum += i;
        Profiler.EndSample();
 
        Profiler.BeginSample("EnumerableProfile");
        Enumerable.Range(0, 60000).Sum();
        Profiler.EndSample();
    }

結果

f:id:hacchi_man:20200602025104p:plain

for のほうが Enumerable.Range に比べて10倍も早く GCも なしという結果に
手軽かもしれないですが、基本的には for でループしたほうが良さそう

36BのGCに関しては、値は関係無く Enumerable.Range を呼び出すだけで 発生していました