3

generic.listが配列より遅いのはなぜですか?

4

2 に答える 2

5

ジェネリック リストは配列よりもわずかに遅くなりますが、ほとんどの場合はそうではありません。ほとんどの場合、ルックアップが少し複雑になることに関係しています。リストは「フードの下で」配列を使用すると言われていますが、配列と同じように隣接するメモリにノードを保持することは保証されていません。

ただし、2005 年にいくつかのベンチマークを見たことがありますが (現在はリンクを見つけることができません)、違いは非常に小さいものです。

また、リストには配列よりも多くの重要な利点があります。主に、項目の追加または削除が簡単なことです。必要な項目の数がわからない場合や、その数がいつ変化するかがわからない場合は、リストを使用する方がはるかに簡単です。そのような場合 (そして正直なところ、ほとんどの場合)、おそらく配列を使用するべきではありません。

于 2008-11-06T17:27:05.320 に答える
3

読み取りパフォーマンスに関しては、次の 2 つの要因があります。

  • 追加の逆参照 (つまり、にはフィールドList<T>が含まれており、それを逆参照する必要があります)T[]
  • T[]ループ中の境界チェックを排除するなど、存在する一部のコンパイラ最適化を使用できません

ただし、 a に追加する方がはるかに簡単ですList<T>。特に、余分なスペースが保持されるためです。つまり、単一の要素を追加するためだけに配列全体のサイズを変更/ブリットする必要はありません。

于 2008-11-06T22:01:28.323 に答える