24

Collection.Net フレームワークの MSDNのクラスを見ています。私はに遭遇し、HybridDictionaryそれは述べています(http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx):

コレクションが小さい間は ListDictionary を使用して IDictionary を実装し、コレクションが大きくなったら Hashtable に切り替えます。

ListDictionaryだから私は州について疑問に思いました( http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx

通常、アイテムが 10 未満のコレクションに推奨されます。

これは、任意の数 (アイテム) のように思えます。ドキュメントには、この背後にあるメカニズムが何であるかを見つけることができません。パフォーマンスの境界は、2^N (2 の N 乗) のようないくつかの項目に関連していると思われます。

現在、私はコレクション タイプをDictionary頻繁に使用しています。コレクションには、「ページ サイズ」に応じて、10 から 30 のアイテム、50 のトップが含まれる場合があります。

ただしHybridDictionaryListDictionaryボックス化解除が必要であり、それらのジェネリック型コンストラクターはありません。

HybridDictionarya vsのパフォーマンスについての比較はどこにも見つかりませんDictionary

では、実際にこれHybridDictionaryを他の辞書型よりもいつ使用するのでしょうか?

PSそして、その機能を最適化するためにアイテムの数が増えたときにHybridDictionary切り替えたListDictionary場合。HashTableなぜこれまで使用するのListDictionaryですか?ソフトウェアの一部の要件が変更され、突然、最大 10 個のアイテムではなく最大 20 個のアイテムを に配置する必要がある場合、パフォーマンスを維持するためにListDictionaryコードをリファクタリングする必要がありますか?HybridDictionary

4

1 に答える 1

36

他の Dictionary タイプよりも HybridDictionary を使用するのはいつですか?

ListDictionaryコレクションのサイズが 10 アイテム未満になることが確実な場合は、 を使用します。

HybridDictionaryほぼ同じですが、コレクション サイズが 10 アイテム未満Dictionaryの場合のパフォーマンスを利用します。ListDictionaryコレクションが 10 を超えると、内部での使用から通常のような使用HybridDictionaryに切り替わります。ListDictionaryHashTableDictionary

したがって、コレクションが通常 10 アイテム未満であるが、時々大きくHybridDictionaryなる可能性がある場合は、1 つをいつ使用するかを使用する必要があります。

たとえば、HybridDictionaryモバイル デバイス アプリケーションの通信レイヤーで使用すると、通信メッセージ キューはほぼ常に 10 アイテム未満になりますが、バックエンド サーバーの停止が発生した場合、通信メッセージは、通信時間の長さに応じて 100 または 1000 に蓄積されます。サーバーがダウンしListDictionaryている場合、このシナリオの a はひどいものであり、その場合HybridDictionary、a に切り替えてHashTableパフォーマンスを維持し、10 未満の場合でも最大のパフォーマンスを提供します。

したがって、特殊な場所で使用されるため、それが属する名前空間System.Collections.Specialized:)

于 2013-09-13T06:55:40.967 に答える