3

リストが与えられた場合:

List<myType> myList = new List<myType>();

コレクションの内容は実行時に変更されます....

リストをクリアするために、使用を提案する例がいくつかあります

myList = new List<myType>();

それよりも

myList.Clear();

ある方法を他の方法よりも優先する理由はいくつか考えられますが、ある方法が他の方法よりも優れている場合について、他に優れたベンチマークやガイドラインはありますか?

4

2 に答える 2

3

リストが大きい場合 (80 キロバイト以上)、大きなオブジェクト ヒープに格納されます。LOH の公式のガイダンスは、ヒープの断片化を減らすために、そこにあるオブジェクトを可能な限り再利用することです。LOH は、通常のヒープのように圧縮されません。

小さいリストの場合、 を呼び出すよりも新しいリストを作成する方が全体的に速いことが多いことがわかりましたClear。これは常に正しいとは限らないため、アプリケーションで両方の方法でテストすることをお勧めします。

を呼び出すとClear、リスト内のすべての項目がデフォルト値に設定Countされ、0 に設定されます。リストの容量は変更されません。そのため、呼び出しClearによって、コレクションに割り当てられたメモリの量が変更されることはありません。リストをクリアしてサイズを縮小する場合は、 を呼び出しClearてから を呼び出しますTrimExcess

注意しないと発生する問題の 1 つは、エイリアシングです。同じリストを参照する複数のオブジェクトがある場合、新しいリストを作成しても、それらの他の参照は削除されません。したがって、2 つのリストが作成されます。ちょうど考えるべきこと。

結局のところ、これには特定の「ベストプラクティス」があるとは思いません。Clear使用するのが良い場合もあれば、新しいリストを割り当てるのが最善の場合もあることがわかりました。

于 2011-08-22T18:00:12.703 に答える
2

リスト オブジェクトにバインドしていて、コードの他の領域からリスト オブジェクトへの参照がある場合は、clear メソッドを使用します。参照がなく、バインドされていない場合は、新しいオブジェクトを作成するのが適切です。

于 2011-08-22T17:54:27.387 に答える