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:
Stopwatch sw;
for(int index = 0; index < 10; index++)
{
sw = Stopwatch.StartNew();
DoSomething();
Console.WriteLine(sw.ElapsedMilliseconds);
}
sw.Stop();
Przykładowe wyniki
132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms
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
ThreadPool.QueueUserWorkItem(delegate { CopyFiles(folder, dest); });
wnętrze, ale stoper zatrzymuje się, zanim wszystko zostanie zrobione.