Ich möchte wissen, wie viel Zeit eine Prozedur / Funktion / Bestellung zu Testzwecken benötigt, um fertig zu werden.
Dies ist, was ich getan habe, aber meine Methode ist falsch, denn wenn die Differenz von Sekunden 0 ist, können die verstrichenen Millisekunden nicht zurückgegeben werden:
Beachten Sie, dass der Schlafwert 500 ms beträgt, sodass die verstrichenen Sekunden 0 sind und keine Millisekunden zurückgegeben werden können.
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))
Kann mir jemand einen besseren Weg zeigen, dies zu tun? Vielleicht mit einem TimeSpan
?
Die Lösung:
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
aufgrund von Sommerzeit- und Zeitzonenproblemen niemals rechnen . Bitte lesen Sie meinen Blog-Beitrag zu diesem ThemaAntworten:
Ein besserer Weg wäre, Stoppuhr anstelle von
DateTime
Unterschieden zu verwenden.Stoppuhrklasse - Microsoft Docs
quelle
Thread.Sleep
, es nur als Beispielcode zu verwenden, um Verzögerung anzuzeigen .... in der Tat sollten Sie vermeiden,Thread.Sleep
irgendwo in Ihrem Code zu verwendenStopwatch
misst die verstrichene Zeit.Hier ist ein
DEMO
.quelle
Stopwatch
über jeder Zeile und stoppen Sie es nach jeder Zeile. Denken Sie daran, dass SieStopwatch.Reset
zum Berechnen auch nach jeder einzelnen Zeile ein verwenden müssen. Basierend auf Ihrer Linie; Werfenstopwatch.Elapsed.ToString(@"d\.hh\:mm\:ss")
es mir sauberer erscheint.Sie können diesen Stoppuhr-Wrapper verwenden:
Verwendung:
Ausgabe:
Für erweiterte Szenarien können Sie BenchmarkDotNet oder Benchmark.It oder NBench verwenden
quelle
Wenn Sie die Stopwatch-Klasse verwenden, können Sie die Watch mit der Methode .StartNew () auf 0 zurücksetzen. Sie müssen also nicht .Reset () gefolgt von .Start () aufrufen. Könnte nützlich sein.
quelle
Die Stoppuhr wurde für diesen Zweck entwickelt und ist eine der besten Methoden zur Messung der Zeitausführung in .NET.
Verwenden Sie DateTimes nicht, um die Zeitausführung in .NET zu messen.
quelle
Wenn Sie nach der Zeit suchen, die der zugeordnete Thread für die Ausführung von Code in der Anwendung aufgewendet hat.
Sie können
ProcessThread.UserProcessorTime
Property verwenden, das Sie unter demSystem.Diagnostics
Namespace erhalten.Hinweis: Wenn Sie mehrere Threads verwenden, können Sie die Zeit jedes Threads einzeln berechnen und zur Berechnung der Gesamtdauer zusammenfassen.
quelle
Ich konnte keine vb.net-Version sehen, wie man die Stoppuhrklasse verwenden könnte, daher habe ich unten ein Beispiel angegeben.
Ich hoffe, das hilft jedem, der bei dieser Frage auf der Suche nach vb.net angekommen ist.
quelle