Comment les performances de lecture/ajout de valeurs de/à Dictionary (Of String, SomeReferenceType) dépendent-elles du nombre d'enregistrements déjà entrés? Je veux dire, le temps augmente-t-il en tant que O (1), O (log n), O (n) quand n devient grand, ou d'une autre manière?Performances du dictionnaire (Of String, SomeReferenceType) dans VB.NET
Dim index As New Dictionary(Of String, SomeReferenceType)
' N entries added in a loop
' ...
Dim id As Integer = 123456789 ' 9-digit number
Dim key As String = id.ToString()
Dim value As New SomeReferenceType
index(key) = value ' Need to estimate this
value = index.TryGetValue(key) ' and this operations depending on N (for large N)
De plus, que se passe-t-il en cas de manque de mémoire? Devrions-nous définir la capacité du dictionnaire avant d'entrer des éléments pour éviter de le copier au cas où il n'y aurait pas assez d'espace mémoire? Combien de temps dure cette opération (copier le dictionnaire à un nouvel endroit si nécessaire) en fonction de N?
Merci beaucoup, c'est ce que je demandais. Comment avez-vous obtenu ceci: "Les données sont en moyenne déplacées 1,3 fois plus, donc le travail supplémentaire moyen pour chaque ajout revient à déplacer environ 16 octets."? De plus, comme je l'ai entendu, il y a un problème de capacité. Quelque chose comme la capacité devrait être un nombre premier ... – Roma
Eh bien, le calcul exact a été fait pour une liste, mais un dictionnaire se développe d'une manière similaire. La capacité d'une liste double, donc elle augmente à 32, 64, 128, 256 et ainsi de suite. Quand il a grandi à N, il a au total N éléments copiés, et si en moyenne la moitié de la dernière capacité allouée est utilisée, N est 1,3 fois la taille actuelle. Un dictionnaire
La capacité d'un dictionnaire est un nombre premier, mais ce n'est rien que vous devez penser, le dictionnaire prend soin de cela par lui-même. – Guffa