下記コードを実行して速度等を見てみる
ループの上限が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(); }
結果
for のほうが Enumerable.Range に比べて10倍も早く GCも なしという結果に
手軽かもしれないですが、基本的には for でループしたほうが良さそう
36BのGCに関しては、値は関係無く Enumerable.Range を呼び出すだけで 発生していました