Hello à tous,
j'ai fait quelques tests de performances sur les fonctions
Asc vs AscW, et Chr$ vs ChrW$. Egalement testé la différence
entre s="" et s=vbNullSTring et enfin if s="" contre
If lenB(s) = 0. De quoi être étonné. Tous les résulats ici:
http://myjmnhome.dyndns.org/B2006/benchfunc.htm
Hello à tous,
j'ai fait quelques tests de performances sur les fonctions
Asc vs AscW, et Chr$ vs ChrW$. Egalement testé la différence
entre s="" et s=vbNullSTring et enfin if s="" contre
If lenB(s) = 0. De quoi être étonné. Tous les résulats ici:
http://myjmnhome.dyndns.org/B2006/benchfunc.htm
Hello à tous,
j'ai fait quelques tests de performances sur les fonctions
Asc vs AscW, et Chr$ vs ChrW$. Egalement testé la différence
entre s="" et s=vbNullSTring et enfin if s="" contre
If lenB(s) = 0. De quoi être étonné. Tous les résulats ici:
http://myjmnhome.dyndns.org/B2006/benchfunc.htm
"Jean-Marc" a écrit dans le message de
43e5d14a$0$13893$
> Hello à tous,
>
> j'ai fait quelques tests de performances sur les fonctions
> Asc vs AscW, et Chr$ vs ChrW$. Egalement testé la différence
> entre s="" et s=vbNullSTring et enfin if s="" contre
> If lenB(s) = 0. De quoi être étonné. Tous les résulats ici:
> http://myjmnhome.dyndns.org/B2006/benchfunc.htm
Hello,
Pas très étonnant en fait... Je m'explique :
Il faut savoir que VB travaille en interne en UNICODE (fonctions en
conséquent, toutes les fonctions travaillant sur un charset différent
Chr$) prennent un temps de conversion supplémentaire.
Normalement, en faisant le dernier test en comparant Len à LenB, il
aussi y avoir une différence parce que LenB effectue une division par
supplémentaire pour tenir compte de cette même différence.
La différence entre les Asc, par exemple, vient probablement du fait
dans le caractère ANSI a plusieurs "traductions" possibles en fonction
paramètres régionaux, charset, ... là où AscW n'a qu'un accès mémoire
faire, vers le pointeur qui lui est passé, et copymemory la valeur
integer.
La différence entre
LenB(s) = 0 et s = ""
vient de la structure du BSTR (connu ici sous le nom de VB String). Le
possède une indication de la longueur avant la chaine sur 4 octets (ce
explique la limitation de 2147483648 caractères par chaines, puisqu'il
s'agit de 2 octets par caractères avec une valeur apparement signée).
va donc rechercher cette information. s = "" au contraire crée une
caractère vide et ensuite lance une comparaison "caractère par
(qui s'arrête vite, mais pas si vite que ça).
Avec du s = vbNullString, les différences devraient être moins
importantes (aucune allocation de mémoire supplémentaire nécessaire).
Un autre phénomène semblable est celui de l'utilisation des API "A vs
Mis à par les considérations de support sur telle ou telle plateforme,
version W est souvent plus rapide car VB ne doit pas prendre la peine
faire la conversion UNICODE -> ANSI (automatiquement, mais malgré
La solution la plus efficace étant AMHA d'encapsuler ces fonctions
typelib de sorte à ce que leur utilisation soit transparente (a noter
typelib ne doit pas être fournie avec l'installation), sinon il faut
par StrPtr (qui n'était pas supporté - et l'est encore moins
"Jean-Marc" <NO_SPAM_jean_marc_n2@yahoo.fr> a écrit dans le message de
43e5d14a$0$13893$ba620e4c@news.skynet.be...
> Hello à tous,
>
> j'ai fait quelques tests de performances sur les fonctions
> Asc vs AscW, et Chr$ vs ChrW$. Egalement testé la différence
> entre s="" et s=vbNullSTring et enfin if s="" contre
> If lenB(s) = 0. De quoi être étonné. Tous les résulats ici:
> http://myjmnhome.dyndns.org/B2006/benchfunc.htm
Hello,
Pas très étonnant en fait... Je m'explique :
Il faut savoir que VB travaille en interne en UNICODE (fonctions en
conséquent, toutes les fonctions travaillant sur un charset différent
Chr$) prennent un temps de conversion supplémentaire.
Normalement, en faisant le dernier test en comparant Len à LenB, il
aussi y avoir une différence parce que LenB effectue une division par
supplémentaire pour tenir compte de cette même différence.
La différence entre les Asc, par exemple, vient probablement du fait
dans le caractère ANSI a plusieurs "traductions" possibles en fonction
paramètres régionaux, charset, ... là où AscW n'a qu'un accès mémoire
faire, vers le pointeur qui lui est passé, et copymemory la valeur
integer.
La différence entre
LenB(s) = 0 et s = ""
vient de la structure du BSTR (connu ici sous le nom de VB String). Le
possède une indication de la longueur avant la chaine sur 4 octets (ce
explique la limitation de 2147483648 caractères par chaines, puisqu'il
s'agit de 2 octets par caractères avec une valeur apparement signée).
va donc rechercher cette information. s = "" au contraire crée une
caractère vide et ensuite lance une comparaison "caractère par
(qui s'arrête vite, mais pas si vite que ça).
Avec du s = vbNullString, les différences devraient être moins
importantes (aucune allocation de mémoire supplémentaire nécessaire).
Un autre phénomène semblable est celui de l'utilisation des API "A vs
Mis à par les considérations de support sur telle ou telle plateforme,
version W est souvent plus rapide car VB ne doit pas prendre la peine
faire la conversion UNICODE -> ANSI (automatiquement, mais malgré
La solution la plus efficace étant AMHA d'encapsuler ces fonctions
typelib de sorte à ce que leur utilisation soit transparente (a noter
typelib ne doit pas être fournie avec l'installation), sinon il faut
par StrPtr (qui n'était pas supporté - et l'est encore moins
"Jean-Marc" a écrit dans le message de
43e5d14a$0$13893$
> Hello à tous,
>
> j'ai fait quelques tests de performances sur les fonctions
> Asc vs AscW, et Chr$ vs ChrW$. Egalement testé la différence
> entre s="" et s=vbNullSTring et enfin if s="" contre
> If lenB(s) = 0. De quoi être étonné. Tous les résulats ici:
> http://myjmnhome.dyndns.org/B2006/benchfunc.htm
Hello,
Pas très étonnant en fait... Je m'explique :
Il faut savoir que VB travaille en interne en UNICODE (fonctions en
conséquent, toutes les fonctions travaillant sur un charset différent
Chr$) prennent un temps de conversion supplémentaire.
Normalement, en faisant le dernier test en comparant Len à LenB, il
aussi y avoir une différence parce que LenB effectue une division par
supplémentaire pour tenir compte de cette même différence.
La différence entre les Asc, par exemple, vient probablement du fait
dans le caractère ANSI a plusieurs "traductions" possibles en fonction
paramètres régionaux, charset, ... là où AscW n'a qu'un accès mémoire
faire, vers le pointeur qui lui est passé, et copymemory la valeur
integer.
La différence entre
LenB(s) = 0 et s = ""
vient de la structure du BSTR (connu ici sous le nom de VB String). Le
possède une indication de la longueur avant la chaine sur 4 octets (ce
explique la limitation de 2147483648 caractères par chaines, puisqu'il
s'agit de 2 octets par caractères avec une valeur apparement signée).
va donc rechercher cette information. s = "" au contraire crée une
caractère vide et ensuite lance une comparaison "caractère par
(qui s'arrête vite, mais pas si vite que ça).
Avec du s = vbNullString, les différences devraient être moins
importantes (aucune allocation de mémoire supplémentaire nécessaire).
Un autre phénomène semblable est celui de l'utilisation des API "A vs
Mis à par les considérations de support sur telle ou telle plateforme,
version W est souvent plus rapide car VB ne doit pas prendre la peine
faire la conversion UNICODE -> ANSI (automatiquement, mais malgré
La solution la plus efficace étant AMHA d'encapsuler ces fonctions
typelib de sorte à ce que leur utilisation soit transparente (a noter
typelib ne doit pas être fournie avec l'installation), sinon il faut
par StrPtr (qui n'était pas supporté - et l'est encore moins
Bonjour
C'est vraiment intéressant....
et qu'en est-t-il de l'écriture d'une conditionnelle incluse dans une
--- Il vaut mieux ---
If toto=vbnullstring then
recup="il n'y a pas de données"
exit for
end if
--- que ----
If toto=vbnullstring then recup="il n'y a pas de données" : exit for
---???---
Bonjour
C'est vraiment intéressant....
et qu'en est-t-il de l'écriture d'une conditionnelle incluse dans une
--- Il vaut mieux ---
If toto=vbnullstring then
recup="il n'y a pas de données"
exit for
end if
--- que ----
If toto=vbnullstring then recup="il n'y a pas de données" : exit for
---???---
Bonjour
C'est vraiment intéressant....
et qu'en est-t-il de l'écriture d'une conditionnelle incluse dans une
--- Il vaut mieux ---
If toto=vbnullstring then
recup="il n'y a pas de données"
exit for
end if
--- que ----
If toto=vbnullstring then recup="il n'y a pas de données" : exit for
---???---
La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un crime
de l'utiliser, mais avec parcimonie). On préfèrera dans ce cas un
DO .. LOOP ou équivalent avec condition de sortie explicite.
La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un crime
de l'utiliser, mais avec parcimonie). On préfèrera dans ce cas un
DO .. LOOP ou équivalent avec condition de sortie explicite.
La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un crime
de l'utiliser, mais avec parcimonie). On préfèrera dans ce cas un
DO .. LOOP ou équivalent avec condition de sortie explicite.
Salutatoi Jean-Marc,
Tu as donc déclaré :
> La première forme. la seconde n'apporte rien, sinon la confusion.
> Note: tant que possible, on évite les Exit For (ce n'est pas un
> de l'utiliser, mais avec parcimonie). On préfèrera dans ce cas un
> DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
le 'exit do' et préférer 'loop until condition'.
Salutatoi Jean-Marc,
Tu as donc déclaré :
> La première forme. la seconde n'apporte rien, sinon la confusion.
> Note: tant que possible, on évite les Exit For (ce n'est pas un
> de l'utiliser, mais avec parcimonie). On préfèrera dans ce cas un
> DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
le 'exit do' et préférer 'loop until condition'.
Salutatoi Jean-Marc,
Tu as donc déclaré :
> La première forme. la seconde n'apporte rien, sinon la confusion.
> Note: tant que possible, on évite les Exit For (ce n'est pas un
> de l'utiliser, mais avec parcimonie). On préfèrera dans ce cas un
> DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
le 'exit do' et préférer 'loop until condition'.
"Aski" a écrit dans le message de
news:Salutatoi Jean-Marc,
Tu as donc déclaré :La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un
crime de l'utiliser, mais avec parcimonie). On préfèrera dans ce
cas un DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
d'éliminer le 'exit do' et préférer 'loop until condition'.
Hello,
Bien entendu, tu as raison. Il faut toujours préférer les sorties
explicites aux ruptures de séquences (exit ...) car cela revient à
un Goto déguisé. Pas très grave car c'est alors un saut en avant
vers une étiquette implicite, mais quand même. Rompre la linéarité
n'est (presque) jamais la meilleure solution.
"Aski" <aski@asci.asc> a écrit dans le message de
news:OjKIIS7KGHA.1832@TK2MSFTNGP11.phx.gbl...
Salutatoi Jean-Marc,
Tu as donc déclaré :
La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un
crime de l'utiliser, mais avec parcimonie). On préfèrera dans ce
cas un DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
d'éliminer le 'exit do' et préférer 'loop until condition'.
Hello,
Bien entendu, tu as raison. Il faut toujours préférer les sorties
explicites aux ruptures de séquences (exit ...) car cela revient à
un Goto déguisé. Pas très grave car c'est alors un saut en avant
vers une étiquette implicite, mais quand même. Rompre la linéarité
n'est (presque) jamais la meilleure solution.
"Aski" a écrit dans le message de
news:Salutatoi Jean-Marc,
Tu as donc déclaré :La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un
crime de l'utiliser, mais avec parcimonie). On préfèrera dans ce
cas un DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
d'éliminer le 'exit do' et préférer 'loop until condition'.
Hello,
Bien entendu, tu as raison. Il faut toujours préférer les sorties
explicites aux ruptures de séquences (exit ...) car cela revient à
un Goto déguisé. Pas très grave car c'est alors un saut en avant
vers une étiquette implicite, mais quand même. Rompre la linéarité
n'est (presque) jamais la meilleure solution.
Salut
Attention : asc et ascW ne renvoient pas la même valeur pour les
qui ne sont pas de l'ASCII strict.
exemple:
si s = chr$(146)
asc(s) donne 146
ascW(s) donne 8217
Je me suis fait piéger en remplaçant dans un code tous les asc par
Salut
Attention : asc et ascW ne renvoient pas la même valeur pour les
qui ne sont pas de l'ASCII strict.
exemple:
si s = chr$(146)
asc(s) donne 146
ascW(s) donne 8217
Je me suis fait piéger en remplaçant dans un code tous les asc par
Salut
Attention : asc et ascW ne renvoient pas la même valeur pour les
qui ne sont pas de l'ASCII strict.
exemple:
si s = chr$(146)
asc(s) donne 146
ascW(s) donne 8217
Je me suis fait piéger en remplaçant dans un code tous les asc par
Salutatoi Jean-Marc,
Tu as donc déclaré :"Aski" a écrit dans le message de
news:Salutatoi Jean-Marc,
Tu as donc déclaré :La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un
crime de l'utiliser, mais avec parcimonie). On préfèrera dans ce
cas un DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
d'éliminer le 'exit do' et préférer 'loop until condition'.
Hello,
Bien entendu, tu as raison. Il faut toujours préférer les sorties
explicites aux ruptures de séquences (exit ...) car cela revient à
un Goto déguisé. Pas très grave car c'est alors un saut en avant
vers une étiquette implicite, mais quand même. Rompre la linéarité
n'est (presque) jamais la meilleure solution.
Pour être complets ajoutons que le seul GoTo admis par les puristes est
celui de 'On Error GoTo'. Il s'ensuit d'ailleurs presqu'obligatoirement un
Exit Sub pour éviter la gestion d'erreur.
Salutatoi Jean-Marc,
Tu as donc déclaré :
"Aski" <aski@asci.asc> a écrit dans le message de
news:OjKIIS7KGHA.1832@TK2MSFTNGP11.phx.gbl...
Salutatoi Jean-Marc,
Tu as donc déclaré :
La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un
crime de l'utiliser, mais avec parcimonie). On préfèrera dans ce
cas un DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
d'éliminer le 'exit do' et préférer 'loop until condition'.
Hello,
Bien entendu, tu as raison. Il faut toujours préférer les sorties
explicites aux ruptures de séquences (exit ...) car cela revient à
un Goto déguisé. Pas très grave car c'est alors un saut en avant
vers une étiquette implicite, mais quand même. Rompre la linéarité
n'est (presque) jamais la meilleure solution.
Pour être complets ajoutons que le seul GoTo admis par les puristes est
celui de 'On Error GoTo'. Il s'ensuit d'ailleurs presqu'obligatoirement un
Exit Sub pour éviter la gestion d'erreur.
Salutatoi Jean-Marc,
Tu as donc déclaré :"Aski" a écrit dans le message de
news:Salutatoi Jean-Marc,
Tu as donc déclaré :La première forme. la seconde n'apporte rien, sinon la confusion.
Note: tant que possible, on évite les Exit For (ce n'est pas un
crime de l'utiliser, mais avec parcimonie). On préfèrera dans ce
cas un DO .. LOOP ou équivalent avec condition de sortie explicite.
Je suppose que, même dans le cas de la boucle, il est préférable
d'éliminer le 'exit do' et préférer 'loop until condition'.
Hello,
Bien entendu, tu as raison. Il faut toujours préférer les sorties
explicites aux ruptures de séquences (exit ...) car cela revient à
un Goto déguisé. Pas très grave car c'est alors un saut en avant
vers une étiquette implicite, mais quand même. Rompre la linéarité
n'est (presque) jamais la meilleure solution.
Pour être complets ajoutons que le seul GoTo admis par les puristes est
celui de 'On Error GoTo'. Il s'ensuit d'ailleurs presqu'obligatoirement un
Exit Sub pour éviter la gestion d'erreur.