Когда использовать HybridDictionary для других типов словарей?

Я рассматриваю классы Collection в MSDN для .Net-структуры. Я столкнулся с HybridDictionary и в нем говорится (http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx):

Реализует IDictionary с помощью ListDictionary, когда коллекция невелика, а затем переключается на Hashtable, когда коллекция становится большой.

Итак, я задавался вопросом о ListDictionary, который гласит (http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx)

Рекомендуется для коллекций, которые обычно включают менее 10 элементов.

Теперь это похоже на произвольное число (элементов) для меня. Я не могу найти в документации, каков механизм этого, я подозревал, что граница производительности была бы связана с рядом элементов, таких как 2 ^ N (2 по мощности N).

Теперь я часто использую тип коллекции Dictionary, и коллекции могут содержать от 10 до 30 элементов, 50 вершин, в зависимости от размера страницы.

Но HybridDictionary и ListDictionary требует распаковки, и для них нет конструкторов типов.

Я не могу найти сравнение в любом месте о производительности HybridDictionary vs Dictionary.

Итак, когда на самом деле использовать этот HybridDictionary по сравнению с другими типами диктонаров?

P.S. И если HybridDictionary переключается на ListDictionary или HashTable, когда количество элементов растет, чтобы оптимизировать его работу. Зачем использовать ListDictionary? Если некоторые требования в программном обеспечении изменяются, и вдруг в ListDictionary должно быть помещено не более 20 элементов, а не максимальное количество из 10 элементов, код должен быть переопределен до HybridDictionary для поддержания производительности?

Ответ 1

Когда использовать HybridDictionary для других типов словарей?

Вы должны использовать ListDictionary, если вы уверены, что размер коллекции будет меньше 10 элементов.

HybridDictionary в значительной степени совпадает с Dictionary, но будет использовать производительность ListDictionary, когда размер коллекции меньше 10 элементов. Когда коллекция будет расти выше 10, HybridDictionary переключится с ListDictionary на внутреннее, используя HashTable, как обычный Dictionary.

Поэтому, когда нужно использовать один, хорошо, если ваша коллекция обычно находится под 10 элементами, но время от времени может увеличиться, тогда HybridDictionary будет использоваться.

Например, мы используем HybridDictionary в нашем коммуникационном слое приложений для мобильных устройств, очередь сообщений comms всегда будет составлять не более 10 элементов, но если произойдет отключение сервера backend, сообщения comms будут накапливаться в 100 или 1000 в зависимости от того, как долго сервер не работает, ListDictionary в этом сценарии будет ужасным, и в этом случае HybridDictionary переключится на HashTable, чтобы сохранить производительность и все же дать нам максимальную производительность, если она меньше 10.

Таким образом, он используется в специализированных местах, поэтому пространство имён принадлежит System.Collections.Specialized:)