8
votes

Comment obtenir le temps écoulé dans des millisecondes

É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 xxx

qui ne me donne que le nombre de secondes passées après minuit.

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?


0 commentaires

8 Réponses :


13
votes

Oui, vous pouvez utiliser l'API Win32:

Private Declare Function GetTickCount Lib "kernel32" () As Long


5 commentaires

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



-2
votes

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")


3 commentaires

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)



1
votes

Vous pouvez utiliser deux API Win32:


1 commentaires

Code VB6 dans cet article de la base de connaissances MSDN: support.microsoft.com/kb/172338



9
votes

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"


1 commentaires

C'est également assez agréable de collecter des statistiques de débogage ou de mettre en œuvre un enregistreur de performance.



1
votes

Il y a du code et une explication dans l'article de MSDN KB Q172338 Comment utiliser QueryPerformancecounter vers le code de temps


0 commentaires

2
votes

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.


0 commentaires

1
votes

Il y a une histoire Thomas Edison, où il interrogeait des ingénieurs potentiels.

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?

exécutez-le 1000 fois et regardez votre montre avant et après. Secondes = millisecondes.


0 commentaires

0
votes

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: xxx


0 commentaires