11

一度にたくさんのアイテムを追加したいがDictionary、事前に(大まかな)数がわかっている場合、適切なコンストラクターのオーバーロードを使用して初期容量を設定すると、メモリとCPUの点でより高速で効率的です。

300.000エントリを使用してテストした場合、辞書の容量をたとえば300.000に設定すると、初期化されていない場合よりも約25%高速になります。

すでに作成された空の辞書があり、たくさんのアイテムを入力する必要がある場合は、どうすればよいですか?readonlyこれは、たとえば、新しいディクショナリインスタンスで再割り当てできない変数であると想定します。ドキュメントには、すでに作成されている辞書の容量に影響を与えるものは何もありません。たとえば、aのようなものClear(int newInitialCapacity)がいいでしょう。

私は運が悪いですか?

4

2 に答える 2

0

答えは次のように見えます:はい、私は運が悪いです。もちろん、要素を1つずつ追加することによって段階的に追加する場合を除いて、すでに構築されている辞書の容量を変更することはできません。

.netだけがJavaのputAllに似Dictionaryたメソッドを持っていれば、それを実装者の賢さに任せることができます。AddAll(..)Dictionary

于 2013-03-28T02:03:58.157 に答える
-1

「ドキュメントに、すでに作成されている辞書の容量に影響を与えるものは何も表示されない」と述べています。

ドキュメントによると、容量はクリア時にリセットされません。

Dictionary.Clearメソッド

Countプロパティは0に設定され、コレクションの要素からの他のオブジェクトへの参照も解放されます。容量は変更されません。

300,000を超えるアイテムとパフォーマンスの調整を行っている辞書があり、辞書を新しくするオプションがありませんか?

ClearItemsをオーバーライドできるため、KeyCollectionを確認する価値があるかもしれません。

KeyedCollection.ClearItemsメソッド

HashSetにはTrimExcessがあります。

HashSet.TrimExcessメソッド

于 2013-03-25T13:29:18.807 に答える