На уровне страницы MSDN для класса Секундомера я обнаружил ссылку на интересную статью, которая делает следующее утверждение о Секундомере:
Однако существуют некоторые серьезные проблемы:
Это может быть ненадежно на ПК с несколькими процессорами. Из-за ошибки в
BIOS, Запустите (), и Остановка () должна быть выполнена на том же процессоре для получения корректного результата.Это ненадежно на процессорах, которые не имеют постоянной тактовой частоты (большинство процессоров может уменьшить тактовую частоту для сохранения энергии). Это объяснено подробно здесь.
Я мало смущен. Я видел тонны примеров использования Секундомера, и никто не упоминает это недостатки. Насколько серьезный это? Я должен избегать использования Секундомера?
Он не сломан , он просто имеет ограничения. Для большинства целей (читайте: неформальный микротест) StopWatch
можно использовать просто потому, что его достаточно для неформального тестирования. Для более формальных целей вы, скорее всего, захотите использовать свой собственный код инструментария, поскольку вы бы гораздо больше инвестировали в получение правильных результатов.
См. Примечания в статье MSDN:
На многопроцессорном компьютере не имеет значения, на каком процессоре выполняется поток. Однако из-за ошибок в BIOS или уровне аппаратной абстракции (HAL) вы можете получить разные результаты синхронизации на разных процессорах. Чтобы указать привязку процессора к потоку, используйте метод ProcessThread.ProcessorAffinity.
Более интересные вопросы:
при каких условиях Stop () будет выполняться на другом процессоре, чем Start ()?
{{1 }}.
В большинстве сценариев приложений ответ - «нет».
при каких условиях тактовая частота процессора изменится в течение измеренного интервала?
.
В тестах с интенсивной загрузкой процессора - "нет".