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.

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
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
 
For Each Enr In Une_InstanceD_Index
               .............
  Next
ç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 InnerDictionnary
               .............
 Next
c'est très rapide (~1s)

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.