Benchmark de boucles

Soyez le premier à donner votre avis sur cette source.

Vue 6 104 fois - Téléchargée 337 fois

Description

Suite aux posts sur la source de Proger ( http://www.vbfrance.com/code.aspx?ID=8198 ), je voulais essayer de dissiper la polémique pour les Do/While et For/next, et me fixer par la même occasion. J'ai inclus toutes les boucles que je connaissais.

Conclusion :


Désolé, j'avais pas vu qu'il y avait déjà autant de sources sur ce sujet, sinon j'aurais pas fait cette application. Bon, étant donné que je l'ai faite, je la mets quand même sur le site. Eviter de trop m'en vouloir. :oP
En plus c'est une première pour moi, j'ai mis plein de commentaires, trop cooooool.

Pour ceux qui ne le savent pas : ne vous basez pas sur les performances que vous avez sur l'IDE (interface de développement), parce qu'une fois votre application compilée, vous risquez d'être surpris. Beaucoup de fonctions portent à confusion, on pourrait croire que certaines sont plus rapides, mais c'est uniquement en compilant qu'on peux vraiment tester.
Par exemple sur mon appli, c'est entre les For/Next et Do/While. On pourrait croire que les premières sont plus rapides, mais c'est uniquement valabe sur l'IDE. Après compilation, c'est différent.

D'après ce que j'ai pu voir (inutile de m'incendier si vous n'êtes pas d'accord), les boucles s'exécutant le plus rapidement sont Do/Loop Until et Do/Loop While, en fait celles dont la vérification se trouvent à la fin. Mais ça a un prix : puisque la vérification se trouve en fin de boucle, VB ne la vérifie que lorsqu'il aura exécuté le code précédant ladite vérification. Donc la boucle sera obligatoirement exécutée la première fois, même si la vérification voudrait l'interdire. Dangereux si vous faite pas attention. :o)
Elles sont plus rapides, mais de très peu. Sur 2 milliards d'itération, on gagne moins d'une seconde, donc autant dire que ça revient au même : arrêtez de vous prendre la tête. :oP

PS : ça dépend peut-être aussi du type de processeur, j'ai testé sur un P4 Northwood 3GHz.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
91
Date d'inscription
jeudi 18 novembre 2004
Statut
Membre
Dernière intervention
17 décembre 2008

salut Proger,
interessant le coup de DefLng et DefInt ; je connaissais pas.
est-ce que ca nous fait gagner en rapidite ?
parcequ'en ce qui me concerne, j'ecrit toujours tout en toute lettre a des fins de lisibilite :
dim NombreDeChiffres as Long
dim TexteAffiche as String
dim ConditionDeSortie as Boolean
etc...
Messages postés
248
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
19 décembre 2008

J'ai épluché la source, a priori rien a redire, même que tu tiens compte du délai d'appel à l'API queryperformance :D

En revanche il faudrai faire une opération standard dans les boucles. Je craint que les versions optimisé "grillent" les boucles puisqu'elles sont inutile.

Sinon, pour faire plus simple dans le changement de type :
(general)
Option Explicit
DefLng A-Z

(subs)
Dim T, I 'automatiquement en mode Long

et version integer :
(general)
Option Explicit
DefInt A-Z

etc :)
Messages postés
23
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
14 janvier 2005

J'ai oublié, il était aussi question de boucles imbriquées. Ca change pas grand chose.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.