TEST COMPARATIF.. FOR.. NEXT DANS LE COIN DROIT VERSUS ...
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 2019
-
9 sept. 2004 à 20:05
LogRaam (aka Gabriel Mailhot)
Messages postés60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 avril 2005
-
13 sept. 2004 à 16:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
LogRaam (aka Gabriel Mailhot)
Messages postés60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 avril 2005 13 sept. 2004 à 16:35
Merci Benouille,
Vraiement touché.. ;-)
MadLucas (qui menace de faire maintenant un test de vitesse avec les opéreteurs mathématiques... Arf!)
cs_Benouille
Messages postés215Date d'inscriptionjeudi 24 octobre 2002StatutMembreDernière intervention 7 septembre 2007 13 sept. 2004 à 11:34
exellent :)
j'aime bien la démarche spirituelle de la boucle en vb
10/10 parceque tu le vaux bien ;)
cs_yoman64
Messages postés592Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 4 décembre 2008 11 sept. 2004 à 06:55
Qu'est ce que vous avez tous a faire des test avec les boucle :S ??
@++
YoMan64
PhPKoDe.Com
tr0piiic
Messages postés34Date d'inscriptionvendredi 6 août 2004StatutMembreDernière intervention 1 octobre 2004 10 sept. 2004 à 12:58
Pour ce que ca gagne en plus ...
oui j'ai un amd athlon 64 3200+ 1giga de ram lol
=)))))
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 10 sept. 2004 à 09:21
Dans un tel cas, le tout n'est pas un histoire de choix de boucle !! mais de choix de technoligie et de langage....
cauroir
Messages postés27Date d'inscriptionvendredi 18 octobre 2002StatutMembreDernière intervention 2 août 2007 10 sept. 2004 à 09:21
Bonjour,
Voila une approche qui me semble interessante. Belle initiative !
Je vais creuser un peu
LogRaam (aka Gabriel Mailhot)
Messages postés60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 avril 2005 10 sept. 2004 à 01:59
Relatif BruNews,
En fait, tout est exponentiel. Si en effet tes boucles font en moyenne 1000 itérations, et bien pas besoin d'optimiser. Mais imagine maintenant que tu scan une matrice de pixels, que chacun des pixels doit être redéfini RGB séparément et que chacun des pixels est ensuite calculé avec une matrice de variation prenant en considération ses voisins... Et que tu décides de faire le tour d'une image de 40 Mo... Disons que dans ces cas extrêmes, le choix d'une boucle rapide peut être judicieux.
Bref, ce test ce veut avant tout un "jeu de courses" des boucles dans VB et comble plus la curiosité qu'autre chose.. Bien que l'utilité de ce test peut servir dans certain cas, il peut très bien ne servir absolument à rien dans d'autres...
Maddy
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 9 sept. 2004 à 23:13
Ceci ne sert strictement a rien.
Il n'y a pas une forme de boucle meilleure qu'une autre, tout dependra du code interne a la boucle.
Des que tu auras des instructions de chaine dans la boucle, son test de sortie ne representera meme pas la milliardieme partie du temps employe.
Ce n'est pas en VB qu'on s'en va a la chasse aux cycles, on n'a aucun controle sur le code produit, alors pure perte de temps.
LogRaam (aka Gabriel Mailhot)
Messages postés60Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention25 avril 2005 9 sept. 2004 à 22:32
Mmmmh, je viens de faire un essai avec le code compilé. Ça fonctionne à la différence que DO.. LOOP remporte la course. Si je fait le calcul:
ff = (ff+1)-1
dans chacune des boucles, j'ai à peu près les mêmes performances qu'avec les boucles vides.. ça rpend juste plus de temps.
Petit détail, le code compilé étant plus rapide, j'ai dû changer les valeurs suivantes:
myCOUNTER = 10000000
numOtest = 100
DOnc en augmentant "myCOUNTER", on peut percevoir le calcul avec le code compilé.
Pour ma part, non-compilé j'ai:
1, 10, 10, 15, 15, 15
Et compilé j'ai:
26, 19, 20, 26, 26, 27
Bien sûre, les itérations sont plus nombreuses avec la version compilée, donc les chiffres sont plus gros.
Verdict, DO..LOOP est plus performant lorsque compilé et FOR..NEXT est plus performant si on roule du code non-compilé (utile pour une application en temps réel)
Voilà,
MadLucas
note: je met une version avec un calcul pour faire plaisir à EB.. ;-)
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 9 sept. 2004 à 20:05
C'est ma fête aujourd'hui ou quoi, ya une ligue contre ma petite personne ? lool
Pour ce qui est de la source (et pour encore poser ma graine la ou il ne faut pas) j'ai compilé le projet avec toutes les options optimisation et figure toi que vb n'a même pas pris la peine de compiler le code suivant :
... 0003d ff 52 04 call DWORD PTR [edx+4]
; 29 : Dim a As Long
; 30 : Dim myCOUNTER As Long
; 31 : myCOUNTER = 100000
; 32 : For a& = 0 To myCOUNTER
; 33 : Next a
; 34 : End Sub
00040 c7 45 fc 00 00
...
Pourquoi ? par ce qu'une boucle vide n'a aucune influence sur le reste du code donc il ne le compile pas tout simplement ! De ce fait ton teste est comme qui dirais "éroné" (suffisais de voir les resultats du teste pour s'en apercevoir).
13 sept. 2004 à 16:35
Vraiement touché.. ;-)
MadLucas (qui menace de faire maintenant un test de vitesse avec les opéreteurs mathématiques... Arf!)
13 sept. 2004 à 11:34
j'aime bien la démarche spirituelle de la boucle en vb
10/10 parceque tu le vaux bien ;)
11 sept. 2004 à 06:55
@++
YoMan64
PhPKoDe.Com
10 sept. 2004 à 12:58
oui j'ai un amd athlon 64 3200+ 1giga de ram lol
=)))))
10 sept. 2004 à 09:21
10 sept. 2004 à 09:21
Voila une approche qui me semble interessante. Belle initiative !
Je vais creuser un peu
10 sept. 2004 à 01:59
En fait, tout est exponentiel. Si en effet tes boucles font en moyenne 1000 itérations, et bien pas besoin d'optimiser. Mais imagine maintenant que tu scan une matrice de pixels, que chacun des pixels doit être redéfini RGB séparément et que chacun des pixels est ensuite calculé avec une matrice de variation prenant en considération ses voisins... Et que tu décides de faire le tour d'une image de 40 Mo... Disons que dans ces cas extrêmes, le choix d'une boucle rapide peut être judicieux.
Bref, ce test ce veut avant tout un "jeu de courses" des boucles dans VB et comble plus la curiosité qu'autre chose.. Bien que l'utilité de ce test peut servir dans certain cas, il peut très bien ne servir absolument à rien dans d'autres...
Maddy
9 sept. 2004 à 23:13
Il n'y a pas une forme de boucle meilleure qu'une autre, tout dependra du code interne a la boucle.
Des que tu auras des instructions de chaine dans la boucle, son test de sortie ne representera meme pas la milliardieme partie du temps employe.
Ce n'est pas en VB qu'on s'en va a la chasse aux cycles, on n'a aucun controle sur le code produit, alors pure perte de temps.
9 sept. 2004 à 22:32
ff = (ff+1)-1
dans chacune des boucles, j'ai à peu près les mêmes performances qu'avec les boucles vides.. ça rpend juste plus de temps.
Petit détail, le code compilé étant plus rapide, j'ai dû changer les valeurs suivantes:
myCOUNTER = 10000000
numOtest = 100
DOnc en augmentant "myCOUNTER", on peut percevoir le calcul avec le code compilé.
Pour ma part, non-compilé j'ai:
1, 10, 10, 15, 15, 15
Et compilé j'ai:
26, 19, 20, 26, 26, 27
Bien sûre, les itérations sont plus nombreuses avec la version compilée, donc les chiffres sont plus gros.
Verdict, DO..LOOP est plus performant lorsque compilé et FOR..NEXT est plus performant si on roule du code non-compilé (utile pour une application en temps réel)
Voilà,
MadLucas
note: je met une version avec un calcul pour faire plaisir à EB.. ;-)
9 sept. 2004 à 20:05
Pour ce qui est de la source (et pour encore poser ma graine la ou il ne faut pas) j'ai compilé le projet avec toutes les options optimisation et figure toi que vb n'a même pas pris la peine de compiler le code suivant :
... 0003d ff 52 04 call DWORD PTR [edx+4]
; 29 : Dim a As Long
; 30 : Dim myCOUNTER As Long
; 31 : myCOUNTER = 100000
; 32 : For a& = 0 To myCOUNTER
; 33 : Next a
; 34 : End Sub
00040 c7 45 fc 00 00
...
Pourquoi ? par ce qu'une boucle vide n'a aucune influence sur le reste du code donc il ne le compile pas tout simplement ! De ce fait ton teste est comme qui dirais "éroné" (suffisais de voir les resultats du teste pour s'en apercevoir).
Aller, bonne continuation
@+