Chcę wiedzieć, ile czasu zajmuje zakończenie procedury / funkcji / zamówienia do celów testowych.
Oto, co zrobiłem, ale moja metoda jest nieprawidłowa, ponieważ jeśli różnica sekund wynosi 0, nie może zwrócić liczby milisekund, które upłynęły:
Zwróć uwagę, że wartość uśpienia wynosi 500 ms, więc upływających sekund wynosi 0, a następnie nie może zwrócić milisekund.
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))
Czy ktoś może mi pokazać lepszy sposób na zrobienie tego? Może z TimeSpan
?
Rozwiązanie:
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
powodu problemów z czasem letnim i strefą czasową. Zapraszam do przeczytania mojego wpisu na blogu na ten tematOdpowiedzi:
Lepszym sposobem byłoby użycie Stopera zamiast
DateTime
różnic.Klasa stopera - Microsoft Docs
źródło
Thread.Sleep
, jest tam tylko jako przykładowy kod pokazujący opóźnienie ... w rzeczywistości powinieneś unikać używaniaThread.Sleep
dowolnego miejsca w swoim kodzieStopwatch
mierzy upływający czas.Oto plik
DEMO
.źródło
Stopwatch
na górze każdej linii i zatrzymaj po każdej linii. Pamiętaj, żeStopwatch.Reset
aby obliczyć , musisz użyć również po każdej linii. Na podstawie twojej linii; spójrz na ideone.com/DjR6bastopwatch.Elapsed.ToString(@"d\.hh\:mm\:ss")
co wydaje się czystszy sposób do mnie.Możesz użyć tego opakowania stopera:
Stosowanie:
Wynik:
W przypadku zaawansowanych scenariuszy możesz użyć BenchmarkDotNet lub Benchmark.It lub NBench
źródło
Jeśli używasz klasy Stopwatch, możesz użyć metody .StartNew () , aby zresetować zegarek do wartości 0. Nie musisz więc wywoływać funkcji .Reset (), a następnie .Start (). Może się przydać.
źródło
Stoper służy do tego celu i jest jednym z najlepszych sposobów pomiaru czasu wykonania w .NET.
Nie używaj DateTimes do mierzenia czasu wykonania w .NET.
źródło
Jeśli szukasz czasu, jaki skojarzony wątek spędził na uruchamianiu kodu wewnątrz aplikacji.
Możesz użyć
ProcessThread.UserProcessorTime
właściwości, którą możesz uzyskać wSystem.Diagnostics
przestrzeni nazw.Uwaga: Jeśli używasz wielu wątków, możesz obliczyć czas każdego wątku osobno i zsumować go, aby obliczyć całkowity czas trwania.
źródło
Nie widziałem wersji vb.net, jak można używać klasy stopera, więc poniżej podałem przykład.
Mam nadzieję, że pomoże to każdemu, kto przyszedł na to pytanie i szukał vb.net.
źródło