проблема с .NET system.diagnostics секундомер - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь создать приложение, которое включает использование класса секундомера.

Stopwatch sw = new Stopwatch();
sw.Start();
while (play)
{
    long timer = sw.ElapsedMilliseconds;
    Debug.WriteLine(timer);
}

Когда я проверил этот цикл и проверил прошедшее время, я обнаружил, что программе не хватает нескольких миллисекунд.

некоторые часы с выхода отладчика:

31
32
33
34
35
36
37
38
40
41
42
43

Любые предложения о том, как я могу решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 31 января 2011

Недостающие миллисекунды? Вы ожидаете увидеть запись для каждого тика в миллисекунду за секунду? Например. 1000 в секунду? Если так, то этого никогда не произойдет. Не существует API синхронизации с точностью до 1 миллисекунды.

Тот факт, что вы выполняете назначение, а также вывод потока в цикле, где вы выводите данные миллисекунд в дополнение к другим процессам операционной системы, таким как переключение задач, означает, что точность миллисекунд не возможна. Вам понадобится выделенная машина реального времени, чтобы получить тот результат, который вы ищете

5 голосов
/ 31 января 2011

Вы теряете миллисекунды из-за того, что ваша программа работает не только в ОС.

Так что время от времени другие программы получают свой временной интервал, и некоторыеоставлены милисекунды.

Вы не можете "исправить" это.

0 голосов
/ 05 июня 2013

Debug.WriteLine может быть медленнее, чем 1 миллисекунда. Это не оптимизировано для скорости.

Вы можете добавить вызов, поместив сообщение в список, а затем записать список в Debug.WriteLine после запуска. Вы можете добавить фоновую задачу, отправив сообщение в Debug.WriteLine.

Оба должны предотвратить таймеры от пропущенных тиков.

Другой причиной пропущенных тиков может быть ОС или другая программа, выполняющая некоторую работу между двумя вызовами Debug.WriteLine. Это может быть даже медленная машина.

Установка приоритета потоков или запуск этого приложения на выделенной машине должны помочь, но такого рода проблемы с таймером ожидаются в Windows, поскольку в ней никогда не говорилось, что это ОС реального времени.

...