Является ли разрешение таймера класса System.Diagnostics.Stopwatch стабильным?

.Net поддерживает синхронизацию с высоким разрешением с использованием класса System.Diagnostics.Stopwatch. Я понимаю, что конкретное разрешение, которое использует этот класс, зависит от базового оборудования и может быть получено с помощью статического свойства Stopwatch.Frequency.

Эта частота, по-видимому, связана с частотой ЦП, и Stopwatch считывает это значение и сохраняет его в статической переменной класса в статическом инициализаторе/конструкторе. Поэтому мне теперь интересно, будет ли этот класс сообщать о неверных таймингах, если часы процессора изменятся? например в системах, которые изменяют тактовую частоту процессора в зависимости от загрузки системы.


person redcalx    schedule 17.10.2012    source источник
comment
Нет, она случайно совпадает с частотой процессора. Ни один разработчик материнских плат не выбирает переменную частоту.   -  person Hans Passant    schedule 17.10.2012


Ответы (1)


MSDN:

*The Frequency value depends on the resolution of the underlying timing mechanism. If the installed hardware and operating system support a high-resolution performance counter, then the Frequency value reflects the frequency of that counter. Otherwise, the Frequency value is based on the system timer frequency.*

Источником Stopwatch.Frequency не является частота процессора. Это частота высокочастотного аппаратного счетчика. В Windows эта частота счетчика обычно также считывается вызовом функция QueryPerformanceCounter в Linux таймеры POSIX высокого разрешения используются для получения времени с высоким разрешением.

В этом контексте часто обсуждается использование счетчика отметок времени (RDTSC - частота процессора), но это не реальная актуальность:

Некоторое старое оборудование может не обеспечивать высокочастотное оборудование для синхронизации, поэтому частота ЦП используется в качестве замены. При использовании частоты ЦП для синхронизации необходимо обеспечить, чтобы частота оставалась постоянной. Более современное оборудование обеспечивает динамическое изменение частоты процессора. Использование частоты ЦП в качестве меры при ее динамическом изменении приведет к беспорядку.

К счастью, это non existing ситуация. Системы, которые могут изменять частоту процессора, более современны. Такие современные системы также имеют отдельный аппаратный высокочастотный таймер таймер событий высокой точности.

Ходят слухи об использовании частоты процессора в многоядерных системах. На самом деле была проблема с определенным оборудованием. Но это было давно и исправлено на какое-то время.

person Arno    schedule 18.10.2012