Jak mogę sprawdzić, ile czasu potrzebuje mój kod C# do uruchomienia?Jak długo mój kod jest uruchamiany?
Odpowiedz
Sprawdź klasie Stopwatch
:
Stopwatch sw = new Stopwatch();
sw.Start();
// your code here
sw.Stop();
TimeSpan elapsedTime = sw.Elapsed;
Sprawdź klasę Stopwatch.
Klasa Stopwatch
oferuje precyzyjne taktowanie w .NET. Jest zdolny do pomiaru czasu z czułością około 100s nanosekund (ułamków milisekund). Aby uzyskać dokładną rozdzielczość, przeczytaj wartość Stopwatch.Frequency
.
var timer = System.Diagnostics.Stopwatch.StartNew();
// Run code here.
var elapsed = timer.ElapsedMilliseconds.
Należy także pamiętać, aby uruchomić swój kod wielokrotnie (tyle razy, ile jest to możliwe), aby uzyskać lepszy średni czas, jak również w celu zmniejszenia skutków wahań obciążenia procesora.
Jak mówili inni, klasa Stopwatch
jest dobre dla prostej strony rozrządu rzeczy. Pozostałe bity pamiętać jednak:
- Kod może generować obiekty, które będą musiały zostać śmieci zebrane po tym, jak zatrzymał stoper
- Odwrotnie Twój rozrządu może zawierać inne obiekty są zbierane śmieci nawet jeśli oni nie mają nic wspólnego z kodem
- Jeśli zaczniesz taktowanie zanim skończy swój sposób po raz pierwszy, będzie to czas JIT
- Zażycie bardzo krótki czas, który prowadzi do bardzo nieprzewidywalne wyniki - dla benchmarkingu Zwykle wolę uruchamiać kod przez wiele sekund, na konto dla aplikacji są przerwane przez inne procesy itp
Jeśli jesteś zainteresowany benchmarkingu, mam projekt MiniBench które muszę obejść do pracy ponownie w pewnym momencie - to nie całkiem gdzie chcę go w końcu, ale to jest początek. Mówię więcej o tym, co chcę osiągnąć dzięki temu w this blog post.
Zalecam użycie narzędzia do profilowania, takiego jak ANTS, aby przetestować prędkość aplikacji i znaleźć wolny kod. Umożliwi to wykonanie testu czasu wykonywania wiersza po wierszu.
Jeśli chcesz, po prostu umieść wokół niego pętlę N-iteracji i użyj StopWatch (lub tylko zegarka na rękę) i podziel przez N. Na przykład, jeśli chcesz mikrosekund, niech N = 1000000. Jeśli się martwisz o nadmiarowej pętli, po prostu rozwiń ją dziesięciokrotnie.
Osobiste podziękowania dla MiniBencha, Jona - stał się dla mnie nieocenionym narzędziem. –
@C Rogers: Prawdopodobnie użyłeś tego więcej niż ja! Naprawdę wrócę do tego jakiś czas ... pisanie raczej przeszło na chwilę :( –