2013-03-25 10 views
11

Dictionaryに一度にたくさんのアイテムを追加したい場合は、あらかじめ(粗い)数値を知っていれば、適切なコンストラクタのオーバーロードを使用して初期容量を設定するとメモリとCPUの面でより効率的です。ディクショナリはどこですか。<,> .SetCapacity(int newCapacity)?

300.000エントリを使用してテストした場合、ディクショナリの容量をたとえば300.000に設定すると、初期化されていない場合より約25%高速です。

が既に作成されていて、たくさんのアイテムを記入する必要がある辞書が空になったらどうすればいいですか?これが例えばであると仮定する。 readonly私は新しい辞書インスタンスで再割り当てできない変数です。私はすでに書かれている辞書の能力に影響を与えるものは見当たりません。例えばのようなもの。 Clear(int newInitialCapacity)がいいでしょう。

私は不運ですか?

+1

[this](http://msdn.microsoft.com/en-us/library/tk84bxf4.aspx)コンストラクタを使用して初期サイズを指定すると何が問題になりますか? –

+1

@TimSchmelter彼はすでに辞書を構築していて、それを再利用したいと思っています。 – webnoob

+3

'Clear(int capacity)'をシミュレートする唯一の方法は、リフレクションを介して 'private void Initialize(int capacity)'を呼び出すことです。 – leppie

答えて

0

答えがあるように見えます:はい、私は運の外にしています。すでに構築されている辞書の容量は変更できません、もちろん、要素を1つずつ追加することによって徐々に増分します。

のみ.NETのDictionaryJavaのputAllに似AddAll(..)方法を持っていた場合、私はDictionary実装者の知性にそれを残すことができます。

-1

文書には、既に構築された辞書の容量に影響を与えることはありません。

文書によると、容量はクリアではリセットされません。

Dictionary.Clear Method

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

30万件以上の項目とパフォーマンスの調整で満たしている辞書があり、辞書を新規作成するオプションがありません。

ClearItemを上書きできるので、KeyCollectionをチェックアウトする価値があります。 HashSetの上で

KeyedCollection.ClearItems Method

TrimExcessがあります。

HashSet.TrimExcess Method

関連する問題