Я делаю приложение, которое требует довольно жесткого времени, а класс 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()), но я понимаю, что что-то еще происходит здесь.
Любое понимание понимается.
Update:
Вот немного более подробно о моем коде: это довольно просто. Это приложение WPF, которое создает новый объект Stopwatch
при запуске, а затем отключает его через Start()
. Затем я создаю DispatcherTimer
, например:
displayTimer = new DispatcherTimer();
displayTimer.Tick += display_Tick;
displayTimer.Interval = DISPLAY_INTERVAL_TIMESPAN;
где время составляет 200 мкс. Мой код отладки просто выводит значение объекта Stopwatch
каждый раз, когда тики dispatchTimer
.
Отладочный журнал находится в dl.dropbox.com/u/7999907/hburg.txt. Первый бит данных в каждой строке - текущая дата/время через DateTime.UtcNow
. Время вправо - это значение через Stopwatch.Elapsed
. Вы можете увидеть, как прыгает секундомер, но DateTime не делает.
Update2:
Веселая статья поддержки Microsoft Значение счетчика производительности может неожиданно перескочить вперед.