Я делаю приложение, которое требует довольно сжатого времени, и класс Stopwatch - идеальное решение. Однако иногда я замечал, что при работе на небольшом панельном ПК значения секундомера были неверными. Я добавил несколько отладочных распечаток, которые отслеживают значение секундомера каждые 200 мс или около того:
0: 00: 197
0: 00: 502
0: 00: 702
...
0: 03: 356
0:12:93
0:13:21
0: 13: 421
...
Как он мог прыгнуть с ~ 3 секунд до ~ 13 секунд? Теперь я вижу, что основная функция QueryPerformanceCounter () содержит ошибки (Остерегайтесь QueryPerformanceCounter ()), но я чувствую, что здесь происходит что-то еще.
Любое понимание приветствуется.
Обновление:
Вот еще немного подробностей о моем коде: это довольно просто. Это приложение WPF, которое создает новый объект Stopwatch
при запуске, а затем запускает его через Start()
. Затем я создаю DispatcherTimer
, например:
displayTimer = new DispatcherTimer();
displayTimer.Tick += display_Tick;
displayTimer.Interval = DISPLAY_INTERVAL_TIMESPAN;
где временной интервал составляет 200 мс. Мой код отладки просто выводит значение объекта Stopwatch
каждый раз, когда тикает dispatchTimer
.
Обновление2:
Интересная статья службы поддержки Microsoft: Значение счетчика производительности может неожиданно резко увеличиться .
DateTime.UtcNow
? - person Jon Skeet   schedule 03.08.2010