Подтвердить что ты не робот

Почему увеличение разрешения таймера через timeBeginPeriod влияет на потребление энергии?

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

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

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

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

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

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

4b9b3361

Ответ 2

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

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

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

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