2013-09-13 3 views
12

Я рассматриваю классы Collection в MSDN для .Net framework. я побежал в HybridDictionary и заявляет (http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx):Когда использовать HybridDictionary для других типов словарей?

Реализует 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 против Dictionary.

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

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

+2

Существует сообщение статью, которая включает сравнительный анализ и сравнение: http://www.dotnetperls.com/hybriddictionary –

+0

@ sa_ddam213 Увидев вывод о том, что «HybridDictionary» показывает только увеличение производительности с менее чем 5 элементами по сравнению с другими словарями, он учитывает утверждение в MSDN что 'ListDictionary' работает лучше, чем' HashTable' с менее чем 10 элементами (ну строго не, но вы получите мою точку зрения). Поэтому этот «HybridDictionary» кажется мне абсолютно лишним. –

+0

Я не вижу, как его избыточный, 'ListDictionary' рекомендуется использовать с менее чем 10 элементами,' HybridDictionary' предназначен, когда вы точно не знаете размер, и он будет автоматически реализовывать переключение, когда размер будет больше чем 10 элементов –

ответ

22

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

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

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

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

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

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

+1

Но каковы критерии выбора' HybridDictionary' над 'Dictionary'? «Словарь» является общим и более простым в использовании в коде, поскольку он не требует распаковки. Я думаю, это не имеет большого значения ... –

+0

Если вы занимаетесь большой работой с «Словарем», и это будет менее 10 предметов, но по другим причинам коллекция может взорваться намного выше 10, вы будете использовать один , потому что у вас будет максимальная производительность, когда она будет меньше 10, но если она вырастет, ваша производительность не будет отрицательно влиять на «ListDictionary», приведенный выше пример моих коммитов - идеальный сценарий использования «HybridDictonary». даже при распаковке «ListDictonary» будет очень хорошо работать с «Словарем» с небольшим количеством предметов. Его очень специализированное использование :) –

+0

Да, производительность на мобильных устройствах более заметно затронута, чем сегодняшние настольные компьютеры. Хорошие серверы с большим количеством запросов могут извлечь выгоду из этого. Но пока его «обычное» приложение пользователя на настольном компьютере (которое не обрабатывает тонны данных), я думаю, это не имеет большого значения. Спасибо за разъяснение использования 'HybridDictionary'. –

Смежные вопросы