[VB6]optimise déclaration variable [Résolu]

Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Statut
Membre
Dernière intervention
27 novembre 2009
- - Dernière réponse : cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
- 27 nov. 2006 à 09:56
Salut à tous,
pour le moment je ne trouve aucune information concernant l'optimisation au niveau de la déclaration de variable


qu'elle est la meilleure façon d'écrire ?...la plus performante


1)
Private Sub Command1_Click
   MsgBox Moi("Le cancre")
End Sub


Private Function Moi(Pseudo as String) as String 
   dim T as long 
   T = 187
   T = T + 200 
   Moi = "attention, il y'a " & T & space(1) & Pseudo & " derrière toi!"
End Function




2)
Private Sub Command1_Click
   MsgBox Moi("Le cancre")
End Sub


Private Function Moi(Pseudo$) as String 
   dim T& 
   T = 187
   T = T + 200 
   Moi = "attention, il y'a " & T & space(1) & Pseudo & " derrière toi!"
End Function 


3)
Private Sub Command1_Click
   MsgBox Moi$("Le cancre")
End Sub


Private Function Moi$(Pseudo$)  
   T& = 187
   T& = T& + 200 
   Moi = "attention, il y'a " & T& & space(1) & Pseudo & " derrière toi!"
End Function 




un exemple avec api :
1)
Public Declare Function socket& Lib "ws2_32" (ByVal iAddressFamily&, ByVal iType&, ByVal iProtocol&)
2)
Public Declare Function socket Lib "ws2_32" (ByVal iAddressFamily as long, ByVal iType as long, ByVal iProtocol as long) As Long


Ps: et je cherche aussi à connaitre l'abréviation pour le Byte,Single,Double
Merci d'avance pour vos réponses
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
3
Merci
Oublie le "typage" par suffixe (il est désuet et n'accélère rien).


Ta première formule est aujourd'hui universellement adoptée.


Il n'y a plus que les anciens (cimme moi) pour utiliser les typages par suffixe, qui ne facilitent pas la maintenance...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
3
Merci
les abréviations sont des restes du vieux basic, elles sont pas forcément très parlantes (faut les connaitres !), donc je te conseille plutôt de déclarer tes variables avec des "As ".
Après pour le passage de paramètre, à part le passage par valeur (byval) ou par référence (byref) qui est un tout petit peu plus rapide, mais beaucoup moins sécurisé (si tu modifie le paramètre dans ta fonction, ca modifie à l'extérieur => source de bug assez difficiles à retrouver !), pas grand chose à dire.

Je serais curieux de voir le code produit après compilation, mais je dirais que ca revient au même !
donc au lieu de grapiller quelques micro-secondes, essaye plutôt d'écrire du code clair et plus simple à maintenir, ce sera plus bénéfique !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
3
Merci
La première version sans hésiter

Les suffixes c'est de l'ancienne école.

Et puis quand tu reprendra tes sources dans 2 ans , tu sera bien content d'avoir tout écrit en clair.

A noter pour certaines fonctions de VB (Left, Mid, Format, ....) la version "$" (left$,...) est plus rapide que l'autre. Elle renvoie directement une chaine de caractère tandis que l'autre renvoie un variant reprsentant une chaine. Donc ce cas et uniquement dans ce cas préférer les fonctions à suffixe.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_casy
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Statut
Membre
Dernière intervention
27 novembre 2009
0
Merci
merci pour vos réponses
Commenter la réponse de le cancre
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Je corrige une chose :

   T = 187
   T = T + 200   

doit être
   T = 387
   <strike>T = T + 200</strike>    '(opération inutile dans ce cas présent)

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Commenter la réponse de mortalino
Messages postés
548
Date d'inscription
mercredi 28 juillet 2004
Statut
Membre
Dernière intervention
11 septembre 2013
2
0
Merci
l'oeil fin ce mortalino  :)
Commenter la réponse de vercomax
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Il ne faut pas oublier que le compilateur détermine d'avance les adresses-mémoire des variables à stocker, peu importe comment elles sont déclarées. Si tu ne mets pas de As Integer, disons, il allouera assez d'espace pour un Variant, mais ça ne changera rien à la rapidité du programme, seulement à la grosseur des adresses-mémoires à réserver, ce qui est assez minime avec les machines qu'on a de nos jours...

L'optimisation passe beaucoup plus par la façon d'écrire le code, et je ne parle pas de longueurs des lignes de code. les IIF sur une ligne font un code court, difficile à lire, mais nécessairement plus rapide à l'exécution.

Pense plutôt aux Classes, Contrôles utilisateurs, à créer des Modules bien définis et à usage restreint. Je dis à usage restreint parce que chaque module est "loadé" dès qu'on y fait appel, même en runtime. Il ne sert donc à rien de tout mettre dans le même module, puisque ce sera long à charger, éventuellement. Multiplier le nombre de module peut être intéressant si on n'a pas besoin de toutes les fonctions à toutes les sessions.

Et d'autres et j'en passe...

MPi
Commenter la réponse de cs_MPi
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Eh eh Salut MPi,

16 octets, par ci, 16 octets par là, sur un gros dev, c'est beaucoup.
Par contre, une précision, j'ai lu dans un bouquin, que le IIF était à proscrire, et qu'il fallait y préférer le traditionnel If .. Then .. Else.
Perso, je préférais (question lisibilité) le IIF mais je ne sais plus quoi penser.

Un regard exterieur me serait appréciable. Qu'en penses-tu ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Hummm,
je viens de voir que j'ai oublié le mot "pas" dans ma phrase
«les IIF sur une ligne font un code court, difficile à lire, mais pas nécessairement plus rapide à l'exécution.» Toute la différence dans un seul mot... c'est tout dire...
Personnellement, je préfère la lisibilité au nombre de lignes.

Mes préférences pour les conditions (si on oublie les simples ou doubles IF):
1- Select Case
2- If multiples
3- IIF

Effectivement, il est préférable de bien déclarer ses variables, mais je n'en ferais pas un plat de quelques "seizaines" d'octets. Auparavant quand les disques durs avec 20 megs pour les gros... et la RAM de quelques megs à peine, on devait absolument gérer ce genre d'espace, mais maintenant...
Je sais malgré tout qu'il faut être vigilant et déclarer ce qui doit être déclaré de la façon dont ça devrait être déclaré. C'était ma déclaration :)

J'ai travaillé sur des projets VB qui faisaient 50 ou 100 megs tout compris avec base de données, fichiers texte, fichiers ressources, ocx personnalisés et autres,... enfin tout le pataclan. Le but était de modifier, améliorer, mais aussi d'optimiser. Un jour, j'ai demandé à mon patron (le créateur) si on ne devrait pas modifier les As Integer par As Byte où on pouvait le faire... Il n'a pas ri, mais je voyais bien que j'en faisais un peu trop...

Finalement, sur 50 megs, si on gagne 10 ko, ça ne changera pas grand chose...
L'optimisation s'effectue à un tout autre niveau:  l'architecture, la redondance, la façon dont le programme charge ses capacités, l'efficacité du code, ...

Pour LeCancre,
si tu veux parler de vitesse d'exécution, il faudrait tenter tes divers exemples en boucle  assez longue et minuter. D'après moi, sans vérifier, il n'y aura pas plus de quelques dixièmes de secondes d'écart sur un longue boucle. Du moins, c'est ce que j'en pense sans avoir testé. Mais si tu retournes dans ton code dans quelques années, j'espère pour toi que tu auras choisi celle qui était la plus lisible... ¦¬)
Soient la 1ere de la série 1 et la 2e de la série 2

MPi
Commenter la réponse de cs_MPi
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Merci MPi pour l'info ! 

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Commenter la réponse de mortalino
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
Pendant que je lisais cet article, je pensais à la question posée par Le Cancre et j'ai pensé que ce serait peut-être une bonne chose de mettre le lien.
C'est en anglais, mais il y a de belles choses à apprendre côté optimisation, au niveau des boucles, entre autres, mais aussi à d'autres niveaux...

http://www.aivosto.com/vbtips/loopopt.html

Bonne lecture.

MPi
Commenter la réponse de cs_MPi
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Statut
Membre
Dernière intervention
27 novembre 2009
0
Merci
sympa le site, merci MPI

--------------------------------------------------------------------------------------------------------------
Le cancre : objet non conforme pour la société,aussi repoussant qu'un virus
Commenter la réponse de le cancre
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
31
0
Merci
Et leur logiciel Project Analyser est pas mal du tout pour la recherche de code optimisable.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy