OVH Cloud OVH Cloud

Question de performances ..

11 réponses
Avatar
AlexC
L'utilisation d'un for each est - il plus rapide que l'utilisation d'une for
i ?
deplus pour une recherche dans un tableau d'une string vaut-il mieux
utiliser
un tableau de string et parcourir celui ci avec un for i pour trouver la
chaine ou utilier
une hastable et utiliser sa méthode GetValue ?

merci d'avance,

AlexC

1 réponse

1 2
Avatar
Zoury
Salut Vko! :O)

Sauf que non. En effet le compilateur va détecter ce schéma et va mettre


la
valeur de la propriété "myArray.Count" dans un registre du processeur,
faisant en sorte que l'accès a cette variable est plus rapide que de


stocker
la valeur dans une variable locale.



Ton affirmation m'intrigue un peu.
Que se passe-t-il dans ce cas ci ? j'veux dire pourquoi est-ce qu'il réévalu
la valeur de al.Count à chaque au lieu d'aller lire le registre du
processeur contenant cette valeur ?
'***
' on créer un tableau de trois éléments
Dim al As ArrayList = New ArrayList(3)
al.AddRange(New String() {"item 1", "item 2", "item 3"})

Dim i As Int32
Dim iCount As Int32 = al.Count

' on boucle avec For
' en enlevant un élément à chaque tour
'
' si vous observez la valeur de al.Count
' en pas à pas vous verrez qu'elle change
' (et ça fini par planter)
'
For i = 0 To al.Count
al.RemoveAt(0)
Console.WriteLine(i)
Next
'***

--
Cordialement
Yanick
MVP pour Visual Basic

"Patrick Philippot" wrote:

> AlexC wrote:
> > L'utilisation d'un for each est - il plus rapide que l'utilisation
> > d'une for i ?
> > deplus pour une recherche dans un tableau d'une string vaut-il mieux
> > utiliser
> > un tableau de string et parcourir celui ci avec un for i pour trouver
> > la chaine ou utilier
> > une hastable et utiliser sa méthode GetValue ?
>
> Bonjour,
>
> En ce qui concerne les collections standard, l'utilisation de for each
> est de loin préférable à une boucle. En effet, les collections standard
> VB sont implémentées comme des listes doublement chaînées, ce qui
> signifie qu'à chaque passe d'une boucle For, vous repasseriez par la
> case départ, alors que la boucle for each maintient une position
> courante.
>
> Pour les autres collections, tout dépend de l'implémentation de
> l'interface IEnumerable mais on peut supposer qu'elle est en général
> optimisée pour for each. Donc en général, oubliez les boucles For en ce
> qui concerne l'énumération des collections qu'elles qu'elles soient.
>
> Si une collection de String doit permettre de retrouver rapidement un
> élément, alors oui une hashtable est préférable. Elle consomme plus de
> ressources mais le temps d'accès est constant.
>
> Re: GetValue. Je ne vois pas de méthode GetValue dans une Hashtable. On
> utilise la méthode Item pour récupérer un élément.
>
> --
> Patrick Philippot - Microsoft MVP
> MainSoft Consulting Services
> www.mainsoft.fr
>
>
>


1 2