En utilisant Reflector, j'ai trouvé ce qui suit : Le Dictionnaire garde les données dans un tableau de structures. Il maintient un compte sur combien de places vides restent dans ce tableau. Lorsque vous ajoutez un élément et qu'il ne reste aucune place vide, il augmente la taille du tableau interne (voir ci-dessous) et copie les données de l'ancien tableau vers le nouveau.
Je vous suggérerais donc d'utiliser le constructeur dans lequel vous définissez la taille initiale si vous savez qu'il y aura de nombreuses entrées.
ÉDIT: La logique est en réalité assez intéressante : Il existe une classe interne appelée HashHelpers
pour trouver des nombres premiers. Pour accélérer cela, elle a également stocké certains nombres premiers dans un tableau statique de 3 à 7199369 (certains sont manquants; pour la raison, voir ci-dessous). Lorsque vous fournissez une capacité, il trouve le prochain nombre premier (même valeur ou plus grand) à partir du tableau, et utilise cela comme capacité initiale. Si vous lui donnez un nombre plus grand que celui de son tableau, il commencera à vérifier manuellement.
Donc si aucune valeur n'est passée comme capacité au Dictionnaire, la capacité de départ est trois.
Une fois la capacité dépassée, il multiplie la capacité actuelle par deux, puis trouve le prochain plus grand nombre premier en utilisant la classe d'aide. C'est pourquoi dans le tableau, chaque premier n'est pas nécessaire, car les premiers "trop proches" ne sont pas vraiment nécessaires.
Donc si nous ne passons aucune valeur initiale, nous obtiendrions (j'ai vérifié le tableau interne):
- 3
- 7
- 17
- 37
- 71
- 163
- 353
- 761
- 1597
- 3371
- 7013
- 14591
- 30293
- 62851
- 130363
- 270371
- 560689
- 1162687
- 2411033
- 4999559
Une fois que nous dépassons cette taille, l'étape suivante sort du tableau interne et il recherchera manuellement des nombres premiers plus grands. Cela sera assez lent. Vous pourriez initialiser avec 7199369 (la plus grande valeur dans le tableau), ou envisager si avoir plus de environ 5 millions d'entrées dans un Dictionnaire signifierait que vous devriez reconsidérer votre conception.
2 votes
Un examen approfondi des structures de données en utilisant C# 2.0 - La file d'attente, la pile et la table de hachage.