Когда использовать 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
:)