Jaki jest najwygodniejszy sposób dokładnego pomiaru czasu, który upłynął zegar ścienny w .NET? W miarę możliwości szukam czegoś z dokładnością do mikrosekundy (10^-6 sekund).Dokładnie zmierzono czas, jaki upłynął zegar ścienny w .NET
Odpowiedz
System.Diagnostics.Stopwatch
to Twój najlepszy zakład. Dokładna dokładność zależy jednak od sprzętu na komputerze, z którego korzystasz, tzn. Od tego, czy jest dostępny licznik wydajności o wysokiej rozdzielczości. (Można sprawdzić, że z pola IsHighResolution
.)
wykorzystanie próbki:
Stopwatch sw = Stopwatch.StartNew();
// Do stuff here
sw.Stop();
TimeSpan time = sw.Elapsed;
Należy pamiętać, że w przypadku korzystania z własności ElapsedTicks
, która jest mierzona w zegarem kleszcze, które nie jest taki sam jak używany kleszcze w DateTime
i TimeSpan
. To mnie wcześniej zaskoczyło - dlatego zawsze używam właściwości ElapsedMilliseconds
lub Elapsed
.
To wygląda idealnie. W moim systemie pole 'Frequency' ma rozdzielczość lepszą niż jedna dziesiąta mikrosekundy. – pauldoo
Wystarczy popatrzeć na Stopwatch Class i Stopwatch.Frequency Field
Tutaj jest klasa, która dostarcza czeka na taką skalę, ponieważ sądzę, że w końcu to, co trzeba zrobić. Czas StopWatch @ CPU prawdopodobnie dostanie APC, a opuścisz swój czas zakończenia.
Dla lepszego sposobu IMHO
Daj mi znać, jeśli okaże się inaczej!
Czy upłynął "czas zegara ściennego" odpowiadający upływowi czasu? – spender
@spender: [Czas zegara ściennego] (http://pl.wikipedia.org/wiki/Wall_clock_time) to łączny czas potrzebny do ukończenia zadania. –
Ah. OK, w przeciwieństwie do czasu procesora. Mam to teraz. – spender