Bonjour à tous,
J'ai le code suivant:
Une classe qui implémente IEnumerable, et contient un champ de type Dictionary. Le GetEnumerator ne fait que retourner le GetEnumerator du champ Dictionary.
Quand je fais une grande itération sur la classe, c'est à dire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Class Index(Of Tindexé, TRôle) implements IEnumerable Private InnerDictionnary As New Dictionary(Of String, Enregistrement(Of TRôle))() Public Overrides Function GetEnumerator() As System.Collections.IEnumerator Return Me.InnerDictionnary.GetEnumerator End Function Friend Sub AjouterEntrée(ByVal O As String, ByVal EnrVal As Enregistrement(Of TRôle)) Me.InnerDictionnary.Add(O, EnrVal) End Sub End Class
ça met trop de temps (~10s)!! Si je fais le même traitement mais j'utilise le champ dictionary directement c'est à dire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 For Each Enr In Une_InstanceD_Index ............. Next
c'est très rapide (~1s)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 For Each Enr In InnerDictionnary ............. Next
Je ne comprend pas la différence car pour moi, je parcours la même collection. Dans l'un ou l'autre je parcours le Dictionary car ma classe ne fait qu'encapsuler le champ Dictionary.
Si quelq'un à des explications,
Merci.
Partager