Bonsoir,En considérant que pour une ArrayList le temps
d'énumération via une boucle For + la méthode Item est rigoureusement
identique au temps d'énumération via For Each (j'ai testé sur plusieurs
dizaines de milliers d'éléments),
C'est pas de chance, il aurait fallu tester sur peu d'éléments ou sur
beaucoup plus d'élements pour pouvoir constater la différence.
En gros :
foreach crée un objet => 1 création d'objet par boucle : sur beaucoup
d'éléments ça ne se voit pas.
A chaque itération, avec foreach il y a quelques petites comparaisons qui
sont faîtes : elles sont peu gourmandes et il faut donc plus que quelques
dizaines de milliers d'éléments pour constater une différence.
Le temps d'énumération en utilisant une boucle for est donc moins grand
qu'en utilisant une boucle foreach, même si ça n'a pas toujours un impact
significatif.
--
Zazar
Bonsoir,
En considérant que pour une ArrayList le temps
d'énumération via une boucle For + la méthode Item est rigoureusement
identique au temps d'énumération via For Each (j'ai testé sur plusieurs
dizaines de milliers d'éléments),
C'est pas de chance, il aurait fallu tester sur peu d'éléments ou sur
beaucoup plus d'élements pour pouvoir constater la différence.
En gros :
foreach crée un objet => 1 création d'objet par boucle : sur beaucoup
d'éléments ça ne se voit pas.
A chaque itération, avec foreach il y a quelques petites comparaisons qui
sont faîtes : elles sont peu gourmandes et il faut donc plus que quelques
dizaines de milliers d'éléments pour constater une différence.
Le temps d'énumération en utilisant une boucle for est donc moins grand
qu'en utilisant une boucle foreach, même si ça n'a pas toujours un impact
significatif.
--
Zazar
Bonsoir,En considérant que pour une ArrayList le temps
d'énumération via une boucle For + la méthode Item est rigoureusement
identique au temps d'énumération via For Each (j'ai testé sur plusieurs
dizaines de milliers d'éléments),
C'est pas de chance, il aurait fallu tester sur peu d'éléments ou sur
beaucoup plus d'élements pour pouvoir constater la différence.
En gros :
foreach crée un objet => 1 création d'objet par boucle : sur beaucoup
d'éléments ça ne se voit pas.
A chaque itération, avec foreach il y a quelques petites comparaisons qui
sont faîtes : elles sont peu gourmandes et il faut donc plus que quelques
dizaines de milliers d'éléments pour constater une différence.
Le temps d'énumération en utilisant une boucle for est donc moins grand
qu'en utilisant une boucle foreach, même si ça n'a pas toujours un impact
significatif.
--
Zazar
Cela dépend fortement code généré et donc du language (enfin, du
compilateur). Les compilateurs tels que C# ou VB.Net se débrouillent pour
que ca ne fasse que peut de différence. En général, tout dépend vraiment
de ce qu'on fait dans la boucle, de ce qui se cache derrière Count ou
Length, etc...
Une bonne méthode pour vérifier est de regarder l'IL qui est généré.
Qq liens:
Performance and Insight: For versus Foreach over a strongly typed array...
Some things you might not know.
http://weblogs.asp.net/justin_rogers/archive/2004/03/26/97230.aspx
Efficiency of iteration over arrays?
http://blogs.msdn.com/ericgu/archive/2004/04/18/115566.aspx
Array iteration performance
http://www.bluebytesoftware.com/blog/PermaLink.aspx?guida1cf7f-73f6-45a9-9aff-e88264b13b0e
Simon.
"Zazar" a écrit dans le
message de news: %23bjRGPA%Bonsoir,En considérant que pour une ArrayList le temps
d'énumération via une boucle For + la méthode Item est rigoureusement
identique au temps d'énumération via For Each (j'ai testé sur plusieurs
dizaines de milliers d'éléments),
C'est pas de chance, il aurait fallu tester sur peu d'éléments ou sur
beaucoup plus d'élements pour pouvoir constater la différence.
En gros :
foreach crée un objet => 1 création d'objet par boucle : sur beaucoup
d'éléments ça ne se voit pas.
A chaque itération, avec foreach il y a quelques petites comparaisons qui
sont faîtes : elles sont peu gourmandes et il faut donc plus que quelques
dizaines de milliers d'éléments pour constater une différence.
Le temps d'énumération en utilisant une boucle for est donc moins grand
qu'en utilisant une boucle foreach, même si ça n'a pas toujours un impact
significatif.
--
Zazar
Cela dépend fortement code généré et donc du language (enfin, du
compilateur). Les compilateurs tels que C# ou VB.Net se débrouillent pour
que ca ne fasse que peut de différence. En général, tout dépend vraiment
de ce qu'on fait dans la boucle, de ce qui se cache derrière Count ou
Length, etc...
Une bonne méthode pour vérifier est de regarder l'IL qui est généré.
Qq liens:
Performance and Insight: For versus Foreach over a strongly typed array...
Some things you might not know.
http://weblogs.asp.net/justin_rogers/archive/2004/03/26/97230.aspx
Efficiency of iteration over arrays?
http://blogs.msdn.com/ericgu/archive/2004/04/18/115566.aspx
Array iteration performance
http://www.bluebytesoftware.com/blog/PermaLink.aspx?guida1cf7f-73f6-45a9-9aff-e88264b13b0e
Simon.
"Zazar" <DILAVNI.nicolas.prats@iie.cnam.fr.INVALID> a écrit dans le
message de news: %23bjRGPA%23EHA.1396@tk2msftngp13.phx.gbl...
Bonsoir,
En considérant que pour une ArrayList le temps
d'énumération via une boucle For + la méthode Item est rigoureusement
identique au temps d'énumération via For Each (j'ai testé sur plusieurs
dizaines de milliers d'éléments),
C'est pas de chance, il aurait fallu tester sur peu d'éléments ou sur
beaucoup plus d'élements pour pouvoir constater la différence.
En gros :
foreach crée un objet => 1 création d'objet par boucle : sur beaucoup
d'éléments ça ne se voit pas.
A chaque itération, avec foreach il y a quelques petites comparaisons qui
sont faîtes : elles sont peu gourmandes et il faut donc plus que quelques
dizaines de milliers d'éléments pour constater une différence.
Le temps d'énumération en utilisant une boucle for est donc moins grand
qu'en utilisant une boucle foreach, même si ça n'a pas toujours un impact
significatif.
--
Zazar
Cela dépend fortement code généré et donc du language (enfin, du
compilateur). Les compilateurs tels que C# ou VB.Net se débrouillent pour
que ca ne fasse que peut de différence. En général, tout dépend vraiment
de ce qu'on fait dans la boucle, de ce qui se cache derrière Count ou
Length, etc...
Une bonne méthode pour vérifier est de regarder l'IL qui est généré.
Qq liens:
Performance and Insight: For versus Foreach over a strongly typed array...
Some things you might not know.
http://weblogs.asp.net/justin_rogers/archive/2004/03/26/97230.aspx
Efficiency of iteration over arrays?
http://blogs.msdn.com/ericgu/archive/2004/04/18/115566.aspx
Array iteration performance
http://www.bluebytesoftware.com/blog/PermaLink.aspx?guida1cf7f-73f6-45a9-9aff-e88264b13b0e
Simon.
"Zazar" a écrit dans le
message de news: %23bjRGPA%Bonsoir,En considérant que pour une ArrayList le temps
d'énumération via une boucle For + la méthode Item est rigoureusement
identique au temps d'énumération via For Each (j'ai testé sur plusieurs
dizaines de milliers d'éléments),
C'est pas de chance, il aurait fallu tester sur peu d'éléments ou sur
beaucoup plus d'élements pour pouvoir constater la différence.
En gros :
foreach crée un objet => 1 création d'objet par boucle : sur beaucoup
d'éléments ça ne se voit pas.
A chaque itération, avec foreach il y a quelques petites comparaisons qui
sont faîtes : elles sont peu gourmandes et il faut donc plus que quelques
dizaines de milliers d'éléments pour constater une différence.
Le temps d'énumération en utilisant une boucle for est donc moins grand
qu'en utilisant une boucle foreach, même si ça n'a pas toujours un impact
significatif.
--
Zazar
Cela dépend fortement code généré et donc du language (enfin, du
compilateur). Les compilateurs tels que C# ou VB.Net se débrouillent pour
que ca ne fasse que peut de différence. En général, tout dépend vraiment
de
ce qu'on fait dans la boucle, de ce qui se cache derrière Count ou Length,
etc...
Cela dépend fortement code généré et donc du language (enfin, du
compilateur). Les compilateurs tels que C# ou VB.Net se débrouillent pour
que ca ne fasse que peut de différence. En général, tout dépend vraiment
de
ce qu'on fait dans la boucle, de ce qui se cache derrière Count ou Length,
etc...
Cela dépend fortement code généré et donc du language (enfin, du
compilateur). Les compilateurs tels que C# ou VB.Net se débrouillent pour
que ca ne fasse que peut de différence. En général, tout dépend vraiment
de
ce qu'on fait dans la boucle, de ce qui se cache derrière Count ou Length,
etc...
;-)
C'est exactement ce que je fais actuellement. Faute de mieux, avant
ces excellentes discussions.
Ma question était certe un peu incomplete.
J'ai oublié de rajouter les mots :
"... actuellement je fais For i = Col.Count-1 To 0 Step -1 ....
comment faire la même chose avec un For Each..."
Merci à tous.
Olivier
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
dans le message de news:%239KPZK%
> Comprends pas ???
>
> Tu demandes à parcourir un for each mais en sens inverse.
> cela est strictement équivalent à prendre les éléments de ta collection
> dans une boucle en les adressant directement par un index décroissant.
>
> Où alors ton problème n'est pas contenu dans ta question.
>
>
>
> "Olivier" <aa.aa.aa> a écrit dans le message de news:
>
> > oui, mais c'est pas vraiment mon pb :-)
> >
> > Merci
> > Olivier
> >
> >
> > "Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
> écrit
> > dans le message de news:
> > > C'est bizarre, mais j'avais appris qu'une boucle for peut toujours
être
> > > transformée en une boucle do while
> > >
> > > For i= mCol.Count - 1 to 0 step -1
> > >
> > > se tranforme simplement en
> > >
> > > I=mCol.Count-1
> > > do while i >=0
> > > ...
> > > i=i-1
> > > loop
> > >
> > > me gourre-je ???
> > >
> > >
> > > "Olivier" <aa.aa.aa> a écrit dans le message de news:
> > >
> > > > Bonjour
> > > >
> > > >
> > > > J'ai une collection trié
> > > > Peut-on faire une boucle avec un For Each mais en commencant par
> > > dernier
> > > > ?
> > > >
> > > > Comme avant en faisant :
> > > > For i = mCol.Count - 1 To 0 Step -1
> > > >
> > > >
> > > >
> > > > Merci
> > > > Olivier
> > > >
> > > >
> > >
> > >
> >
> >
>
>
;-)
C'est exactement ce que je fais actuellement. Faute de mieux, avant
ces excellentes discussions.
Ma question était certe un peu incomplete.
J'ai oublié de rajouter les mots :
"... actuellement je fais For i = Col.Count-1 To 0 Step -1 ....
comment faire la même chose avec un For Each..."
Merci à tous.
Olivier
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
dans le message de news:%239KPZK%239EHA.3260@TK2MSFTNGP14.phx.gbl...
> Comprends pas ???
>
> Tu demandes à parcourir un for each mais en sens inverse.
> cela est strictement équivalent à prendre les éléments de ta collection
> dans une boucle en les adressant directement par un index décroissant.
>
> Où alors ton problème n'est pas contenu dans ta question.
>
>
>
> "Olivier" <aa.aa.aa> a écrit dans le message de news:
> uXsO4q99EHA.2676@TK2MSFTNGP12.phx.gbl...
> > oui, mais c'est pas vraiment mon pb :-)
> >
> > Merci
> > Olivier
> >
> >
> > "Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
> écrit
> > dans le message de news:ODpYN689EHA.4028@TK2MSFTNGP15.phx.gbl...
> > > C'est bizarre, mais j'avais appris qu'une boucle for peut toujours
être
> > > transformée en une boucle do while
> > >
> > > For i= mCol.Count - 1 to 0 step -1
> > >
> > > se tranforme simplement en
> > >
> > > I=mCol.Count-1
> > > do while i >=0
> > > ...
> > > i=i-1
> > > loop
> > >
> > > me gourre-je ???
> > >
> > >
> > > "Olivier" <aa.aa.aa> a écrit dans le message de news:
> > > uxXw2Lw9EHA.3336@TK2MSFTNGP11.phx.gbl...
> > > > Bonjour
> > > >
> > > >
> > > > J'ai une collection trié
> > > > Peut-on faire une boucle avec un For Each mais en commencant par
> > > dernier
> > > > ?
> > > >
> > > > Comme avant en faisant :
> > > > For i = mCol.Count - 1 To 0 Step -1
> > > >
> > > >
> > > >
> > > > Merci
> > > > Olivier
> > > >
> > > >
> > >
> > >
> >
> >
>
>
;-)
C'est exactement ce que je fais actuellement. Faute de mieux, avant
ces excellentes discussions.
Ma question était certe un peu incomplete.
J'ai oublié de rajouter les mots :
"... actuellement je fais For i = Col.Count-1 To 0 Step -1 ....
comment faire la même chose avec un For Each..."
Merci à tous.
Olivier
"Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
dans le message de news:%239KPZK%
> Comprends pas ???
>
> Tu demandes à parcourir un for each mais en sens inverse.
> cela est strictement équivalent à prendre les éléments de ta collection
> dans une boucle en les adressant directement par un index décroissant.
>
> Où alors ton problème n'est pas contenu dans ta question.
>
>
>
> "Olivier" <aa.aa.aa> a écrit dans le message de news:
>
> > oui, mais c'est pas vraiment mon pb :-)
> >
> > Merci
> > Olivier
> >
> >
> > "Thierry Bertrand" <bertrand.thierry(nospam)@(nospam)numericable.fr> a
> écrit
> > dans le message de news:
> > > C'est bizarre, mais j'avais appris qu'une boucle for peut toujours
être
> > > transformée en une boucle do while
> > >
> > > For i= mCol.Count - 1 to 0 step -1
> > >
> > > se tranforme simplement en
> > >
> > > I=mCol.Count-1
> > > do while i >=0
> > > ...
> > > i=i-1
> > > loop
> > >
> > > me gourre-je ???
> > >
> > >
> > > "Olivier" <aa.aa.aa> a écrit dans le message de news:
> > >
> > > > Bonjour
> > > >
> > > >
> > > > J'ai une collection trié
> > > > Peut-on faire une boucle avec un For Each mais en commencant par
> > > dernier
> > > > ?
> > > >
> > > > Comme avant en faisant :
> > > > For i = mCol.Count - 1 To 0 Step -1
> > > >
> > > >
> > > >
> > > > Merci
> > > > Olivier
> > > >
> > > >
> > >
> > >
> >
> >
>
>