【C#】LinqのToArrayとToListについて

LinqでToArrayやToListを使うときの注意点なのです。 使い方によっては負荷が上がってしまうので用途により使い分けたほうがよいです。

パフォーマンス比較

次のコードを書いてUnityのProfilerで調べてみます。

 Profiler.BeginSample("None");
 var sample1 = Enumerable.Range(1, 10).Select(GetString);
 Profiler.EndSample();
        
 Profiler.BeginSample("ToArray");
 var sample2 = Enumerable.Range(1, 10).Select(GetString).ToArray();
 Profiler.EndSample();
        
 Profiler.BeginSample("ToList");
 var sample3 = Enumerable.Range(1, 10).Select(GetString).ToList();
 Profiler.EndSample();

画像が見にくいですが1番右がCC Allocです。

f:id:albatrus:20210403213719p:plain
Profilerの比較

見てわかるようにToArrayとToListを使った場合の負荷が上がっています。

用途で使い分ける

配列やListとして扱う必要がある場合にはToArrayやToListを使っていきましょう。 ただ、for文などで中身を取り出すだけで使うのであればIEnumerable<>のまま使ったほうがよいです。

foreach (var s in sample1)
{
    Debug.Log(s);
}