1. ホーム
  2. .net

コレクションをクリアするのと、新しいインスタンスを作成するのはどちらが速いですか?

2023-08-12 02:59:51

質問

私のコードには、数十から数百の要素を持つ一般的なリストがいくつかあります。 時々、このリストを他のオブジェクトで再充填する必要があるので、質問です。 Clear() メソッドを呼び出すのと new List<T>() ?

どのように解決するのですか?

<ブロッククオート

を呼び出すと、より速くなります。 Clear() メソッドを呼び出すのと、`new List()を作成するのと、どちらが速いでしょうか?

これは答えようがありません。 コレクションがどれくらいの期間存在していたかを含め、本当に多くの要因に依存します。

ここでの最良の選択肢は、そうでしょう。

  1. アプリケーションをプロファイルし、これが本当に重要かどうかを確認します。 その場合、このオブジェクトをどのように考えるかという点で、最も理にかなっている方法を使用します。

  2. もしそれが重要であれば、コードの両方のセットを書き、速度の違いを測定します (もしあれば)。

実用的な観点からは Clear() を呼び出しても、実際にはメモリは減りません。 List<T> によって使用される) メモリを実際に削減することはできません。 新しい List<T> を作成すると、新しいリストが割り当てられることになり、その結果、成長とともにさらに割り当てが増えることになります。

しかし、これは遅くなるという意味ではありません。多くの場合、再割り当てを行うことは より速い というのも、大きな配列をより高いガベージコレクション世代に昇格させる可能性が低く、その結果、GC プロセスをより速く維持することができるからです。

あなたの正確なシナリオと 測定 をプロファイラーで測定しなければ、あなたのシナリオではどちらが優れているのかを知る方法はありません。