Mid() vs Mid$()
Selon la documentation en VB6 le Mid() renvoie une variante, mais Mid$() renvoie une chaîne de caractères et apparemment c'est plus efficace.
Mes questions sont :
- Ce simple test puis-je utiliser pour discerner la différence dans la performance ? J'ai essayé la surveillance d'une application simple d'effectuer quelques opérations de la chaîne avec Perfmon, mais il n'y avait pas
différence perceptible. - Est-il la peine de s'inquiéter? J'ai pris l'habitude d'utiliser le $-isée fonctions,
mais dois-je recommande à tout le monde dans mon équipe à l'utiliser?
Maintenant, vous pouvez jusqu'-vote. 😉
Rien de mal avec un peu de quid pro quo. 🙂
Rien de mal avec un peu de quid pro quo. 🙂
OriginalL'auteur jakdep | 2009-02-06
Vous devez vous connecter pour publier un commentaire.
N'est pas la peine de s'inquiéter au sujet de. C'est un vestige de Microsoft de Base de 15 à 20 ans, quand un processeur rapide a été ordres de grandeur plus lent que rien aujourd'hui.
Il a un certain attrait esthétique à utiliser le Milieu de$ plutôt que de laisser des VB de déterminer ce que vos types de données sont, bien. Et si vous avez des boucles qui sont en cours d'exécution, par exemple, des milliers de tiems une seconde, puis votre facteur de curiosité peut augmenter. Sinon, néh.
Voici un lien à quelqu'un qui a mesuré la différence. Mi$ était environ 2,5 fois plus vite qu'à la Mi. Y compris les tests de revenir à VB4.
Pourrait envisager d'inclure un 3ème partie de la bibliothèque comme de l'Endurance. Comprend de nombreux chaîne de traitement des routines écrites en C qui sont beaucoup plus rapides que VB6. hallogram.com/stamina/routines.html
OriginalL'auteur dkretz
Tandis que les performances entre eux est négligeable, ce n'est pas vraiment un élément de différenciation de l'utiliser de toute façon.
Il peut y avoir des nuances lors de l'utilisation d'une variante quand un type fort est nécessaire. Pour exemple ce qui se passe quand vous passez une variante à un paramètre attend à une chaîne ByRef? Rien de mauvais, mais quelque chose d'un peu plus de passage d'une adresse qui se passe.
Donc si vous savez que vous voulez travailler avec des cordes, puis aller de l'avant et utiliser le $ versions de ces fonctions, le comportement d'eux et de leur utilisation dans d'autres expressions est plus simple et mieux compris. Si vous savez que vous avez besoin d'une variante et vos entrées sont des variantes alors assurez-vous d'utiliser la non $ versions.
OriginalL'auteur AnthonyWJones
Honnêtement, je pense que c'est négligeable.
Peut-être vous pouvez essayer quelque chose comme cela. Télécharger le "High-Performance Objet Timer" de http://ccrp.mvps.org/, faire une longue boucle (1 000 000 d'itérations) des opérations de la chaîne, et de mesurer le temps d'exécution de la différence. Par "opérations", je veux dire: la Concaténation de
Variant
s contrairement à la concaténation deString
s.Mid()
etMid$()
sera très probablement effectuer la même. Otoh, que - vous pouvez tester que.Si vous l'avez fait, je serais intéressé si vous avez affiché les résultats.
la toux toux Désolé, c'est +1 si je pouvais upvote.
Je suis surpris. - Ce vraiment est un empêche presque totalement la différence.
la différence est vraiment mesurables, et qui n'est pas négligeable lors du traitement d'un lot de données entrantes ... le changement de tous milieu/gauche/droite/etc fonction de leur équivalent en dollars (ainsi que l'optimisation de certaines boucles et d'autres processus réduit le refreshrate dans l'une de mes application à partir de 3 secondes à 1 / 10ème de seconde) ... le $ fait environ une demi-seconde de cette augmentation de la vitesse
OriginalL'auteur Tomalak