2009-09-04 7 views
3

J'utilise actuellement une table de hachage pour stocker une liste d'identifiants uniques et de données associées, qui sont tous lus à partir d'un fichier.Hashtable lente pour ajouter des valeurs?

La longueur de ce fichier de données peut très grandement, de 1 entrée à plusieurs centaines de milliers. J'ai remarqué un ralentissement significatif de la vitesse d'ajout d'entrées au Hashtable une fois qu'il a passé environ 50 000 entrées.

Je pense que le réglage de la capacité initiale pourrait aider, mais évidemment je ne peux pas connaître ce nombre puisque les données sont lues dans un fichier. Quelqu'un peut-il suggérer un moyen d'accélérer l'ajout de beaucoup d'entrées, ou ce comportement est-il assez normal?

edit: À l'heure actuelle, j'utilise simplement un Hashtable. Je pense qu'il devrait probablement être la chaîne Dictionary, MyDataObject, mais cela semble être un problème distinct.

+0

Quelle classe utilisez-vous? Dictionnaire ? –

+1

Avez-vous testé si le réglage d'une grande capacité améliore les performances lorsqu'il y a beaucoup d'éléments à insérer? – AnthonyWJones

+0

La définition de la capacité ne devrait pas avoir un grand impact - et ne devrait pas être faite lorsque vous ne savez pas combien d'entrées vous aurez (comme n'importe quoi entre 1 et 100.000+). – tanascius

Répondre

2

See here pour la comparaison des HashTables et des dictionnaires pour un grand nombre d'articles.

+0

Je ne pensais pas que la différence serait si radicale - il semble que le fait de passer à un dictionnaire contribuerait grandement à résoudre mon problème. Cependant, je ne peux pas tester maintenant, mais je soupçonne que je verrais le même genre de ralentissement à plus petite échelle avec un dictionnaire. – jnylen

+0

La comparaison est néanmoins intéressante, car elle teste avec 10.000.000 de clés et une interface graphique comme ID. Cela prend ~ 6sec. Donc il ne devrait pas y avoir de goulot d'étranglement pour 50 000 entrées ... C'est pourquoi je pense que ça pourrait être le fichier plutôt que l'insert ... – tanascius

+0

Ce benchmark n'est pas très bon car les nouveaux GUID sont générés dans la boucle temporisée et la génération du GUID est lente à un accès à la table de hachage. Dans un test rapide, j'ai trouvé que la création d'un nouveau GUID prend environ 6 fois plus longtemps qu'un insert dans le dictionnaire . –

Questions connexes