Możliwa duplikat:
Jak zmierzyć czas działania funkcji?
Mam metodę zajmującą czas we / wy, która kopiuje dane z lokalizacji do innej. Jaki jest najlepszy i najbardziej realny sposób obliczania czasu wykonania? Thread
? Timer
? Stopwatch
? Jakieś inne rozwiązanie? Chcę najbardziej dokładny i najkrócej jak to możliwe.
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
wnętrze, ale stoper zatrzymuje się, zanim wszystko zostanie zrobione.Z własnego doświadczenia,
System.Diagnostics.Stopwatch
klasa może być wykorzystana do pomiaru czasu wykonania metody, jednak UWAGA : nie jest całkowicie dokładna!Rozważ następujący przykład:
Przykładowe wyniki
Teraz się zastanawiasz; „no cóż, dlaczego za pierwszym razem zajęło to 132 ms, a przez resztę znacznie mniej czasu?”
Odpowiedź jest taka,
Stopwatch
że nie kompensuje aktywności „szumu tła” w .NET, takiej jak JITing. Dlatego przy pierwszym uruchomieniu tej metody .NET JIT jest pierwszy. Czas potrzebny na to jest dodawany do czasu wykonania. Podobnie inne czynniki będą również powodować zmianę czasu wykonania.To, czego naprawdę powinieneś szukać absolutnej dokładności, to profilowanie wydajności !
Spójrz na następujące:
RedGate ANTS Performance Profiler jest produktem komercyjnym, ale zapewnia bardzo dokładne wyniki. - Zwiększ wydajność swoich aplikacji dzięki profilowaniu .NET
Oto artykuł StackOverflow na temat profilowania: - Jakie są dobre profile .NET?
Napisałem również artykuł na temat profilowania wydajności za pomocą stopera, na który warto spojrzeć - profilowanie wydajności w .NET
źródło
StopWatch
klasa szuka najlepszego rozwiązania.Ma również pole statyczne o nazwie
Stopwatch.IsHighResolution
. Oczywiście jest to problem ze sprzętem i systemem operacyjnym.źródło
Jeśli chcesz zrozumieć wydajność, najlepszą odpowiedzią jest skorzystanie z profilera.
W przeciwnym razie System.Diagnostics.StopWatch zapewnia zegar o wysokiej rozdzielczości.
źródło
StopWatch użyje licznika o wysokiej rozdzielczości
Jeśli mierzysz IO, twoje dane prawdopodobnie będą miały wpływ na zdarzenia zewnętrzne i bardzo bym się martwił. dokładność (jak wskazano powyżej). Zamiast tego wziąłbym zakres pomiarów i wziął pod uwagę średnią i rozkład tych liczb.
źródło
źródło