le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009
-
22 nov. 2006 à 20:32
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 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
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 22 nov. 2006 à 20:40
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 !
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 22 nov. 2006 à 21:06
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 #
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 23 nov. 2006 à 00:11
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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 23 nov. 2006 à 00:15
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"
<!--
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 23 nov. 2006 à 02:54
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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 27 nov. 2006 à 03:00
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...
le cancre
Messages postés292Date d'inscriptionmercredi 25 octobre 2006StatutMembreDernière intervention27 novembre 2009 27 nov. 2006 à 09:49
sympa le site, merci MPI
--------------------------------------------------------------------------------------------------------------
Le cancre : objet non conforme pour la société,aussi repoussant qu'un virus