Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007
-
19 mai 2006 à 16:31
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007
-
20 mai 2006 à 12:06
Bonjour
Dans mes sources, je code mid, left, right, trim, ...
CodeAdvisor (Best Programming) de Microsoft conseille mid$, left$, right$, trim$, ...
J'ai voulu connaître la différence et j'ai cherché sur le net et dans le forum sans trouver de réponse convainquante.
J'ai même fait 2 versions d'un petit programme vb (un avec $ et l'autre sans) mais je n'ai pas vu de différence notable en terme de rapidité d'exécution et de mobilisation de ressources.
Quelqu'un saurait-il m'expliquer la réelle différence entre $ et pas $ ?
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 19 mai 2006 à 17:07
Je dirais comme franckydeluka... Les $ signifiant simplement qu'on
travail sur des chaînes. Mais il me semble qu'elles sont plus rapide
que les sans $.
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 19 mai 2006 à 18:45
Bon, test concluant.
Veuillez m'excuser pour le dérangement, j'aurais dù faire ce test avant de poser ma question.
J'espère quand même que ça pourra servir à d'autres.
J'ai bricolé ce test :
Private Sub Command1_Click()
Dim s As String
Dim r As String
Dim i As Long
Dim t As Date
Dim t1 As Date
Dim t2 As Date
s = "toto veut du gateau mais il préfère les gateaux avec de la chantilly"
t = Time
For i = 1 To 10000000
r = Mid(s, 60, 9)
Next
t1 = Format(Time - t, "hh:mm:ss")
t = Time
For i = 1 To 10000000
r = Mid$(s, 60, 9)
Next
t2 = Format(Time - t, "hh:mm:ss")
MsgBox "Sans $ : " & t1 & vbCrLf & "Avec $ : " & t2
End Sub
Je l'ai fait tourner sur une machine pourvue d'un CELERON 700Mhz (pour accentuer la différence) et le résultat est : avec le $ c'est plus rapide que sans comme le disait <rt15>. En l'occurence 3 secondes de différence pour ce test.
Donc il n'y a pas photo, j'adopte les $ en VB6.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 19 mai 2006 à 21:08
L'explication est simple :
Les fonctions left, mid, .... travaillent avec des variables de type Variant représentant des chaines.
Les fonctions left$, mid$, ... travaillent avec des variables de type Chaines.
Le résultat est tout aussi simple, avec les secondes, gain de temps et gain de mémoire. Mais effectivement quasiment invisible en temps normal.
Les premières necessitent du traitement en plus : conversion des paramètres 'string' passés en 'variant', moulinette interne (avec probablement reconvertion en string ou char ou ???), puis conversion du résultat 'variant' en 'string'.
Juste un détail, ne te base pas sur la comparaison VB6/.NET pour parler d'héritage. Dans VB.NET, l'ensemble des fonctions ont été réécrites. Quant à VB6, l'héritage n'est pas dans la fonction, mais uniquement dans la symbolique du signe $, qui déclarait effectivement une variable comme chaine de caractère dans les anciens Basic.
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 19 mai 2006 à 16:58
Salut,
D'après la MSDN
MID Fonction:
Renvoie une valeur de type Variant (String) contenant un nombre indiqué de caractères extraits d'une chaîne de caractères.
BLABLABLA
Note Utilisez la fonction MidB pour traiter sous forme d'octets les données relatives aux octets contenues dans une chaîne, comme dans les langages à jeux de caractères à octets doubles. Au lieu d'indiquer le nombre de caractères, les
<object id="alink_8" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_8.Click() arguments] indiquent le nombre d'octets. A des fins d'illustration du code utilisant la fonction MidB, reportez-vous au second exemple de la rubrique correspondante.
Voila j espere que ceci peu t'aider.
Note: j ai aussi fait ceci pour connaitre la réponse des experts
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_franckydeluka
Messages postés228Date d'inscriptionmardi 5 avril 2005StatutMembreDernière intervention 4 janvier 20081 19 mai 2006 à 17:00
Alors je peux me tromper et cela est à prendre avec précaution mais il me semble que le $ est un héritage du BASIC (Beginner's All-purpose Symbolic Instruction Code) et a été conservée jusqu'au VB6.
A noté que toutes ces instructions (mid$, left$, mid, left..) n'existent plus en VB.NET
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 février 2007 19 mai 2006 à 18:13
jrivet > j'ai parcouru la MSDN de VB6 et le site de MICROSOFT : pas convaincant
franckydeluka > c'est ce que je me dis aussi : un vieil héritage. Je pratique aussi le VB.NET et les $ ont disparu comme Left et Right et il ne reste que le Mid. (sans $) si on n'utilise pas le NameSpace Microsoft.VisualBasic qui est lui aussi un héritage des anciennes versions de VB.
Rt15 > si quand on met les $ c'est plus rapide je met des $ partout. J'ai fait des tests mais sur de petits programmes. Je m'en vais tester avec une méga-boucle, on verra bien.
En fait, mon problème est que je dois reprendre une application écrite en VB6 qui rame à mort et je cherche toutes les optimisations possibles. J'ai déjà modifié pas mal de choses au niveau déclaration de variables, libération de mémoire, ... suivant les posts que j'ai lu dans le forum. Il y a amélioration mais ce n'est pas le top.
Cette application manipule beaucoup de fichiers texte (donc de chaînes) et c'est la raison de mon topic.
En tous cas, merci pour vos réponses, je vous tiendrais au courant de mes tests.