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 ?
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 > > >
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
>
>
>
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 > > >