Étant donné que la concaténation des chaînes est assez faible dans VB6, je teste plusieurs implémentations StringBuilder. Pour voir combien de temps ils sont en cours d'exécution, j'utilise actuellement la fonction intégrée qui ne me donne que le nombre de secondes passées après minuit. P> Y a-t-il un moyen (je suppose en importation d'une fonction système) pour obtenir quelque chose avec une précision de millisecondes? p> p>
8 Réponses :
Oui, vous pouvez utiliser l'API Win32:
Private Declare Function GetTickCount Lib "kernel32" () As Long
Gettickcount n'a que 10 ms de précision, si vous avez besoin de plus de précision que vous devez utiliser QueryPerformCounter
MSDN ne dit rien d'environ 10 ms, mais il est dit: "La résolution est limitée à la résolution de la minuterie du système. Cette valeur est également affectée par les ajustements effectués par la fonction GetSystemTimeAdJustment." Donc, peut-être 10ms est pour votre machine spécifique?
GettickCount est assez bon pour la plupart des fins, tant que vous êtes au courant si ses limitations, essayez le code dans Support. Microsoft.com/kb/172338 Cependant, pour vous satisfaire que la précision de 10 ms est la meilleure que vous allez obtenir sur n'importe quel système Windows
Oui, l'article de Raymond blogs.msdn.com/oldnewthing/archive/ 2005/09/02 / 459952.aspx est agréable, il fait toujours référence à une résolution d'une minuterie système, mais il conseille également d'utiliser QueryPerformCounter, qui prend également du temps à exécuter - il y a donc des compromis. Cependant bon à savoir.
L'article de Fyi Raymond Chen (précision n'est pas identique à la précision) peut maintenant être trouvé ici: devblogs.microsoft.com/oldnewthing/20050902-00/?p=34333
Vous pouvez essayer d'utiliser le système :: Diagnostics :: Chronomètre
Imports System.Diagnostics Dim sw As New Stopwatch() sw.Start() // do something LOG("Elapsed " + sw.ElapsedMilliseconds + " ms")
C'est le code .NET, il a spécifiquement dit VB6 (qui était la dernière version avant de publier .net 1.0 a été publié)
Désolé mon mauvais. Ensuite, le gettickcount est le moyen d'aller dans VB6 car il s'agit de l'alternative à l'objet Clock_T en C / C ++.
.NET HOTCHWATCH utilise QueryPerformEcanceCounter / QueryPerformanceFréquence dans l'arrière-plan, dans la mesure du possible (vous pouvez savoir s'il est utilisé s'il est utilisé en examinant la propriété Ishaghresolution de chronomètre)
Vous pouvez utiliser deux API Win32: P>
Celles-ci utilisent GRAND_Integer pour représenter 64 bits. P>
Code VB6 dans cet article de la base de connaissances MSDN: support.microsoft.com/kb/172338
Mettez le code suivant dans une classe de chronomètre:
Dim sw as StopWatch sw = New StopWatch sw.Start ' Code you want to time Debug.Print "Code took " & sw.ElapsedMilliseconds " ms"
C'est également assez agréable de collecter des statistiques de débogage ou de mettre en œuvre un enregistreur de performance.
Il y a du code et une explication dans l'article de MSDN KB Q172338 Comment utiliser QueryPerformancecounter vers le code de temps a > p>
Vous pouvez également envisager d'utiliser une approche différente. Essayez d'appeler vos routines d'une boucle avec suffisamment d'itérations pour vous donner une différence de temps mesurable. P>
Il y a une histoire Thomas Edison, où il interrogeait des ingénieurs potentiels. P>
Il leur demande de déterminer le volume d'une ampoule. Le candidat doit mesurer, puis utilise ensuite la formule du volume d'une sphère et une autre formule pour le volume du cou, etc. Le candidat B remplit-le d'eau et la verse dans une tasse à mesurer. Qui pensez-vous avoir le travail? P>
exécutez-le 1000 fois et regardez votre montre avant et après. Secondes = millisecondes. P>
J'utilise toujours cela dans un module quelque part (pourrait être dans une classe cependant). Ce code vous permet de maintenir jusqu'à six minuteries, avec une précision élevée: