Почему увеличение разрешения таймера с помощью timeBeginPeriod влияет на энергопотребление? - PullRequest
13 голосов
/ 29 сентября 2011

Я сейчас пишу приложение на C #, где мне нужно запустить таймер прибл. каждые 5 миллисекунд. Из некоторых исследований видно, что лучший способ сделать это включает p / invoking timeBeginPeriod (...), чтобы изменить разрешение системного таймера. В моем примере кода это работает достаточно хорошо.

Я нашел интересное предупреждение об использовании этой функции в блоге Ларри Остермана MSDN в этой записи :

Адам: вызов timeBeginPeriod также увеличивает точность GetTickCount.

использование timeBeginPeriod - ужасно плохая идея в целом - мы активно удаляли все его использование в Windows из-за последствий энергопотребления, связанных с его использованием.

Существуют более эффективные способы обеспечения своевременной работы вашего потока.

Кто-нибудь точно знает, почему это происходит, или какими могут быть эти "лучшие способы" (которые не указаны в теме)? О какой дополнительной мощности мы говорим?

Ответы [ 2 ]

16 голосов
/ 29 сентября 2011

Потому что это вызывает больше использования процессора. Хорошее объяснение: Таймеры, Разрешение таймера и Разработка эффективного кода .

5 голосов
/ 29 сентября 2011

Изменение разрешения системного таймера влияет на энергопотребление, в основном потому, что многие разработчики не понимают оконные таймеры. Вы видите много кода со значениями сна или таймера менее 15 мс. Это также изменяет поведение системных задач, что может привести к увеличению энергопотребления.

При изменении системного таймера на 1 мс внезапно весь этот код, который просыпался каждые 15 мс, начинает просыпаться гораздо чаще, и загрузка ЦП возрастает.

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

У меня есть небольшая программа, которая изменяет системный таймер, чтобы вы могли самостоятельно поэкспериментировать и проверить энергопотребление. Есть также ряд ссылок и немного фона на http://www.lucashale.com/timer-resolution/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...