Je veux savoir combien de temps une procédure / fonction / commande prend pour terminer, à des fins de test.
C'est ce que j'ai fait mais ma méthode est fausse car si la différence de secondes est de 0, je ne peux pas retourner les millisecondes écoulées:
Notez que la valeur de veille est de 500 ms, donc les secondes écoulées sont égales à 0, alors il ne peut pas retourner les millisecondes.
Dim Execution_Start As System.DateTime = System.DateTime.Now
Threading.Thread.Sleep(500)
Dim Execution_End As System.DateTime = System.DateTime.Now
MsgBox(String.Format("H:{0} M:{1} S:{2} MS:{3}", _
DateDiff(DateInterval.Hour, Execution_Start, Execution_End), _
DateDiff(DateInterval.Minute, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End), _
DateDiff(DateInterval.Second, Execution_Start, Execution_End) * 60))
Quelqu'un peut-il me montrer une meilleure façon de faire cela? Peut-être avec un TimeSpan
?
La solution:
Dim Execution_Start As New Stopwatch
Execution_Start.Start()
Threading.Thread.Sleep(500)
MessageBox.Show("H:" & Execution_Start.Elapsed.Hours & vbNewLine & _
"M:" & Execution_Start.Elapsed.Minutes & vbNewLine & _
"S:" & Execution_Start.Elapsed.Seconds & vbNewLine & _
"MS:" & Execution_Start.Elapsed.Milliseconds & vbNewLine, _
"Code execution time", MessageBoxButtons.OK, MessageBoxIcon.Information)
DateTime.Now
raison de problèmes d'heure d'été et de fuseau horaire. S'il vous plaît lire mon article de blog sur ce sujet mêmeRéponses:
Une meilleure façon serait d'utiliser Chronomètre , au lieu des
DateTime
différences.Cours de chronomètre - Microsoft Docs
la source
Thread.Sleep
, c'est juste là comme exemple de code pour montrer le retard .... en fait, vous devriez éviter d'utiliserThread.Sleep
n'importe où dans votre codeStopwatch
mesure le temps écoulé.Voici un
DEMO
.la source
Stopwatch
au-dessus de chaque ligne et arrêtez-le après chaque ligne. N'oubliez pas que vous devez également utiliserStopwatch.Reset
après chaque ligne pour calculer. Basé sur votre ligne; jetez un oeil ideone.com/DjR6bastopwatch.Elapsed.ToString(@"d\.hh\:mm\:ss")
ce qui me semble plus propre.Vous pouvez utiliser ce wrapper Chronomètre:
Usage:
Production:
Pour les scénarios avancés, vous pouvez utiliser BenchmarkDotNet ou Benchmark.It ou NBench
la source
Si vous utilisez la classe Stopwatch, vous pouvez utiliser la méthode .StartNew () pour réinitialiser la montre à 0. Vous n'avez donc pas besoin d'appeler .Reset () suivi de .Start (). Cela pourrait être utile.
la source
Le chronomètre est conçu à cet effet et constitue l'un des meilleurs moyens de mesurer l'exécution du temps dans .NET.
N'utilisez pas DateTimes pour mesurer le temps d'exécution dans .NET.
la source
Si vous recherchez le temps que le thread associé a passé à exécuter du code dans l'application.
Vous pouvez utiliser
ProcessThread.UserProcessorTime
Property que vous pouvez obtenir sous l'System.Diagnostics
espace de noms.Remarque: Si vous utilisez plusieurs threads, vous pouvez calculer le temps de chaque thread individuellement et le additionner pour calculer la durée totale.
la source
Je ne pouvais pas voir une version vb.net de la façon dont on pourrait utiliser la classe chronomètre, j'ai donc fourni un exemple ci-dessous.
J'espère que cela aidera quiconque est arrivé à cette question à la recherche de vb.net.
la source