Quand utiliser un HybridDictionary sur les autres Dictionnaire types?
Je suis à la recherche à la Collection
classes dans MSDN pour la .Net framework.
J'ai couru dans la HybridDictionary
et les états (http://msdn.microsoft.com/en-us/library/system.collections.specialized.hybriddictionary.aspx):
Implémente IDictionary à l'aide d'un ListDictionary alors que la collection est petite, puis de passer à une table de hachage quand la collection est grande.
Donc je me demandais à propos de la ListDictionary
qui stipule (http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx)
Recommandé pour les collections qui comprennent généralement moins de 10 articles.
Qui semble désormais comme un arbitraire nombre (des articles) pour moi. Je ne trouve pas dans la documentation que le mécanisme derrière ce serait, je soupçonne les limites de ses performances auraient été liées à un certain nombre d'éléments comme 2^N (2 à la puissance N).
Maintenant je n'utilise pas le type de collection de Dictionary
souvent, et les collections peuvent contenir de 10 à 30 éléments, 50 tops, en fonction de la "taille de la page'.
Mais HybridDictionary
et ListDictionary
nécessite unboxing et il n'y a pas de type générique contructors pour eux.
Je ne peux pas trouver une comparaison n'importe où sur la performance d'un HybridDictionary
vs Dictionary
.
Alors, quand utiliser cette HybridDictionary
sur les autres Dictonary types?
P. S. Et si HybridDictionary
commutateurs à ListDictionary
ou HashTable
lorsque le nombre d'éléments poussent à optimiser son fonctionnement. Pourquoi utiliser un ListDictionary
? Si certaines exigences de la modification de logiciels, et soudain, un maximum de 20 éléments doivent être mis dans le ListDictionary
, au lieu d'un nombre maximum de 10 articles, le code doit être re-factorisé pour HybridDictionary
pour maintenir la performance?
Voir la conclusion qu'une
HybridDictionary
montre seulement l'augmentation de la performance avec moins de 5 éléments par rapport à d'autres Dictionaryies, elle va à l'encontre de la déclaration sur MSDN et un ListDictionary
effectue de mieux qu'un HashTable
avec moins de 10 articles (bien strictement pas, mais vous avez mon point). Donc, ce HybridDictionary
semble totalement redondant pour moi.Je ne vois pas comment sa redondant,
ListDictionary
est recommandé pour être utilisé avec moins de 10 points, le HybridDictionary
est pour quand tu ne sais pas exactement de la taille et il sera interrupteur automatique implémentations lorsque la taille est supérieure à 10 élémentsCorrection: "L'utilisation de
ListDictionary
dans le code de vos projets semble totalement superflus", pourquoi ne pas toujours utiliser un HybridDictionary
.Specialized.Collections
sont Specialized.Collections
je pense, LOLOriginalL'auteur Mike de Klerk | 2013-09-13
Vous devez vous connecter pour publier un commentaire.
Vous utilisez le
ListDictionary
lorsque vous êtes certain de la taille de la collection sera moins de 10 points.La
HybridDictionary
est à peu près le même queDictionary
mais de profiter de la performance deListDictionary
lorsque la taille de la collection est à moins de 10 articles. Une fois la collection se développe au-dessus de 10 laHybridDictionary
va passer de l'utilisation deListDictionary
en interne à l'aide d'unHashTable
comme un vulgaireDictionary
.Donc quand utiliser l'un, eh bien, si votre collection est généralement de moins de 10 articles, mais parfois pu grandir, puis
HybridDictionary
sera le seul à utiliser.Par exemple, nous utilisons
HybridDictionary
dans nos applications mobile comms couche, les comms message de la file d'attente sera à peu près toujours être de moins de 10 articles, mais si il y a un backend de la panne du serveur de comms messages s'accumuler dans les 100 ou 1000 en fonction de combien de temps le serveur est down, uneListDictionary
dans ce scénario serait terrible, et dans ce casHybridDictionary
allons passer à unHashTable
pour garder des performances en hausse et toujours de nous donner un maximum de performance lorsqu'il est inférieur à 10.Donc utilisé dans les lieux spécialisés, où l'espace de noms, il appartient à
System.Collections.Specialized
🙂HybridDictionary
surDictionary
?Dictionary
est générique, et plus facile à utiliser dans le code car il n'exige pas unboxing. Je suppose que cela n'a pas beaucoup d'importance...Si vous faites beaucoup de travail avec la
Dictionary
et il va être de moins de 10 articles, mais pour d'autres raisons, la collection pourrait exploser bien au-dessus de 10 la vous en utilisez un, parce que vous aurez à max de performance lors de son moins de 10 ans, mais si elle grandira, votre performance ne sera pas affectée par laListDictionary
, Mes comms exemple ci-dessus est un scénario parfait pour utiliser unHybridDictonary
. même avec l'unboxing de laListDictonary
va effectuer très bien contre unDictionary
avec de petites quantités d'éléments de Son très spécialisées 🙂Oui, la performance sur les appareils mobiles sont nettement plus touchés que ceux d'aujourd'hui les ordinateurs de bureau. Bien des serveurs avec beaucoup de demande peut bénéficier de cela aussi. Mais aussi longtemps comme un "régulier" de l'utilisateur de l'application sur une machine de bureau (qui ne traite pas des tonnes de données) je suppose que cela n'a pas beaucoup d'importance. Merci pour la clarification de l'utilisation de
HybridDictionary
.Je ne voudrais pas la règle sur les applications de bureau, en bas le comte de files d'attente/la mise en cache des scénarios avec un inconnu nombre d'éléments, vous pouvez voir assez surprenant gains de performance à l'aide de
ListDictionary
etHybridDictonary
, l'Hybride fondamentalement juste a un cran de sûreté si vous vous retrouvez plus de 10 articles pour assurer de meilleures performances.OriginalL'auteur sa_ddam213