COURS OPTIMISATION DU CODE VB AVEC PROGRAMME DE TEST

cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007 - 6 août 2002 à 15:34
cs_mehdibou Messages postés 365 Date d'inscription vendredi 24 mai 2002 Statut Membre Dernière intervention 18 octobre 2004 - 18 août 2003 à 18:19
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/4234-cours-optimisation-du-code-vb-avec-programme-de-test

cs_mehdibou Messages postés 365 Date d'inscription vendredi 24 mai 2002 Statut Membre Dernière intervention 18 octobre 2004
18 août 2003 à 18:19
Je voudrais juste dire que le test Len() est lstrlen() est faussé car le type String en VB stocke la longueur de la chaine, la fonction est donc extremement rapide. Mais l'utilisation de l'api oblige VB a convertir la chaine unicode (car VB6 gère les chaines ainsi) en chaine format C (et donc obligation de parcourir toute la chaine avant d'en trouver la fin).
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016
23 janv. 2003 à 08:58
salut,

juste pour le plaisir : BRAVO !!!
cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007
15 nov. 2002 à 19:59
J'ais déjà pensé programmer un Add-In Vb pour optimiser le code mais après reflexion, j'ais laissé tombé. En effet, le programmeur doit apprendre à produire un code de qualité et optimisé, il ne doit pas s'appuyer sur un programme qui le ferais à sa place; le programmeur est capable de produire un code largement meilleur qu'un programme... La meilleure solution est de downloader des cours sur l'optimisation, c'est pour cela que j'ai posté cette source.
@+ et bonne prog!
Ricpperso Messages postés 236 Date d'inscription jeudi 24 janvier 2002 Statut Membre Dernière intervention 26 octobre 2004
15 nov. 2002 à 14:37
De ton cerveau, la plupars des cerveau on un langage énormement plus évolué et énormément plus rapide que nos ordi.
leptidev Messages postés 206 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 4 décembre 2007
15 nov. 2002 à 11:05
Marrant, VB ne donne jamais le même temps d'exécution pour des instructions similaire, pkoi ????
C vrai qu'un forum sur l'optimisation serait le bienvenue.

au fait, tu pourrais créer un programme qui optimise automatiquement le code généré par notre pauvre cerveau, non ?
cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007
8 août 2002 à 16:56
Voila, je viens de mettre à jour le Zip et la capture.
@ Brushttiii Pok ;-)
cs_Fife Messages postés 73 Date d'inscription lundi 23 octobre 2000 Statut Membre Dernière intervention 16 mars 2008 3
8 août 2002 à 13:01
Super interressant
Bon... je vais voir ce que je peux faire avec Right et Left...
Excellente idée !!!
@+
cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007
8 août 2002 à 08:54
Je suis en train de préparer la nouvelle version. Elle comportera plus de tests et il y aura aussi un autre programme permettant de comparer les différents types de compilation que propose Vb... D'après les premiers tests que j'ai éffectué, la compilation en P-Code est à la traine ;-)
Aller @+
cs_urban Messages postés 8 Date d'inscription vendredi 21 juin 2002 Statut Membre Dernière intervention 8 août 2002
7 août 2002 à 23:25
Interessant cette partie, ça demanderait un forum, rien que pour rassembler toutes les améliorations ... Moi, j'utilise beaucoup de rotations sur recordset avec un test sur le EOF... quand je dis beaucoup, ce sont des milliers de fois ! Je vais m'y interesser de prés et remplacer toutes mes occurences lors d'utilisation de dynaset. Bravo. Bonnes idées.
Sheikah Messages postés 6 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 7 août 2002
7 août 2002 à 22:38
Et idem avec les If imbriqués et Select case :|
Sheikah Messages postés 6 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 7 août 2002
7 août 2002 à 22:33
Nox a raison, "If x = True" est plus rapide que "If x" 1 fois sur 2 !
Sheikah Messages postés 6 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 7 août 2002
7 août 2002 à 22:27
Hmbon on est pas à un commentaire positif près ;) Bravo!
cs_jeanyves Messages postés 57 Date d'inscription samedi 30 mars 2002 Statut Membre Dernière intervention 24 mars 2003
7 août 2002 à 17:15
Très bien fait, très enrichissant et même édifiant en ce qui concerne les temps de traitement.
yoyogott Messages postés 14 Date d'inscription mardi 27 février 2001 Statut Membre Dernière intervention 25 septembre 2007
7 août 2002 à 16:26
En parlant d'orthographe j'ai oublié un 's' oups m'i suis trompette !!
yoyogott Messages postés 14 Date d'inscription mardi 27 février 2001 Statut Membre Dernière intervention 25 septembre 2007
7 août 2002 à 16:25
Génial, pour des perfectionniste comme moi tu as tapé dans le mille ;-)
Et les gars siou plait, faites gaffe à l'orthographe please ...

Merci à toi cobra84
cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007
7 août 2002 à 11:29
J'ais mis à jour le Zip... Mais il me reste pleins de tests à implementer!
@+ ;-)
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
7 août 2002 à 08:54
Encore une autre idée interressante... (tu me diras, y'en a des masses).
Lors de l'utilisation d'un recordset (avec ADO, DAO). Il vaut largement mieux utiliser une boucle For Next que faire une Do Until EOF.

Exemple:

Do Until MyRs.EOF
Me.Text1.Text = MyRs.Fields(1).Value
MyRs.MoveNext
Loop

EST BEAUCOUP PLUS LENT QUE

Dim RecCount As Long
Dim I As Long

MyRs.MoveLast
MyRs.MoveFirst

RecCount = MyRs.RecordCount

For I=1 to RecCount
Me.Text1.Text = MyRs.Fields(1).Value
MyRs.MoveNext
Next I

La 2e façon de faire est plus rapide que la première. Ceci est du au fait qu'il n'y a pas de vérification de fin de fichier à chaque passage dans la boucle. Ceci est surtout probant pour des jeux d'enregistrements conséquents, comme pour beaucoup d'autres exemples.

Certes la 2e façon de faire est plus longue en code, mais sachez qu'en VB, le code le plus court n'est pas forcément plus rapide à l'exécution.

Les instructions du type: IIF, CHOOSE, SWITCH, REPLACE,... sont très certainement plus lentes que si on les avait écrite nous mêmes. Mais c'est vrai qu'à l'écriture du code, c'est beaucoup plus rapide à 'pondre'.

J'ai lu aussi qu'il était plus judicieux d'utiliser des variables de type LONG au lieu de l'INTEGER. VB6 fonctionnant en 32 bits, celui-ci serait plus optimal avec la gestion du type LONG, ce qui me correct comme raisonnement.

Bonne prog à toutes et àtous...

NéoB
cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007
7 août 2002 à 08:34
Merci pour toutes ces idées! Je suis en train de préparer l'upgrade... Je la mettrais en ligne dans la journée...
@+ et bonne prog ;-)
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
7 août 2002 à 01:35
vraiment excellent

autre idée
comparer les différente boucle pour une nombre (textbox) fois: do, while, for

connaitre la quantité de mémoire utiliser pour l'exécution (il y a un exemple sur le site pour un utilitaire de gestion de pc, faudrias inclure le code avec une option on/off pour pas trop influencer la vitesse)

l'utilisation de certain ocx comme image ou picture

les différent trie avec une nombre (textbox) de donné

la différence de temps et de mémoire entre des if imbriqué ou un select case

s,il vaut mieux inclu une image dasn un programme vb ou de le loader au démarrage.

le gain de temps de mettre des images en mémoire au lieu des reloader à chaque fois (de toute façon, avec la mémoire qu'on possède sur nos oridnateur, mettre en mémoire, ça change pus grand chose à comparé lire sur le disque qui est très long)

utilisation du timer au lieu de l'API (J'ai toujours utiliser le timer, mais il me semble qu'il y a un API aussi)

les différence entre les type de compilation possible small code ou fast code

les différente option possible non nécessaire pour certain programme lorsqu'on le met en .exe

mettre tout les texte affiché dnas un fichier texte, le loader au démarre pour afficher tout les texte dans le programme prend t'il plus de temps que de tout mettre les texte directement dans VB (ça serait pratique à connaitre pour les logiciel multilangue, si on perd pas trop de temps à l'exécution du programme)

utilisation d'un if pour savoir si on dois faire une action aulieu de l'exécuter est t'il plus rapide. exemple: avec les api getpixel et setpixel, on peut inversé l'image de l'écran de l'ordinateur. Est t'il plus justicieux d'intervertir tout les pixel ou de faire une validation si les 2 pixels sont différent avant de changer (desfois ajouter un petit if, peut accélérer grandement un programme, comme dans ce cas, intervertir 2 pixels identiques, ça fais pas grand chose).

faudrait un exemple, mais j'en ai pas en tête. Utiliser un code extrêment court est pas toujours le plus rapide. mieux vaut faire une boucle mixer avec des if, que de faire pliens de boucle imbriqué.

là, j'ai pus d'idée de d'autres test. J'ai pas le temps de le coder, donc faudrait que quelqu'un le fasse, ça pourrais en aider beaucoup.
cs_Nox Messages postés 415 Date d'inscription mardi 3 avril 2001 Statut Membre Dernière intervention 26 avril 2008
7 août 2002 à 01:27
ba chez moi c'est le TRUE qui est le + rapide!

c bien ce prog!! 10/10
leneuf22 Messages postés 156 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 4 mars 2003 1
6 août 2002 à 21:47
Super ce programme !!
Merci :)
thiosyiasar Messages postés 186 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 30 novembre 2010 3
6 août 2002 à 18:29
Excellente idée, en plus je suis d'accord avec ce que tu dis.
Par contre je ne savait pas pour les méthodes Right, Left.... !!!!! (je vais tester)
Pour le with, c'est vrai qu'il est plus rapide (et plus propre) mais il m'est arrivé de voir des lignes de codes ignorées (sauf en pas à pas). Dans ce cas, j'utilisai une l'objet Selection de Word.Application. (Word2K)

Merci :)
cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007
6 août 2002 à 16:18
Je mettrais une mise à jour en ligne demain (max12, tu as raison, je vais montrer l'importance du bloc With). J'essaierais aussi de compléter le cours...
Aller @+ ;-)
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
6 août 2002 à 15:43
Wow réellement interressant, au plaisir de voir d'autre Update, montre a utiliser les With plutot que des répétition, etc... (Suggestion)

@+
cobra84 Messages postés 42 Date d'inscription dimanche 26 août 2001 Statut Membre Dernière intervention 13 août 2007
6 août 2002 à 15:34
Le cours ainsi que le programme de test ne sont pas complets, Si vous avez des idées, suggestions, faites le moi savoir...
@+ et Bonne Prog ;-)
Rejoignez-nous