Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

16.01.2009 13:38 | Zloy Kak Pё$

В нынешнее время, когда уровень использования мобильных устройств растет с каждым днем, вопрос энергопотребления ноутбуков приобретает особую важность. Учитывая, что за прошлый год уровень продаж ноутбуков вырос на 50%, очень важно, чтобы у пользователей была возможность пользоваться мобильными компьютерами в течение всего дня. Но данный вопрос важен не только с точки зрения конечного пользователя – увеличение спроса на ноутбуки привело к снижению расходов на электроэнергию в корпоративной сфере. В компаниях среднего размера около от 7 до 18% общей суммы затрат на электроэнергию приходится на компьютеры. И пока разработчики аппаратного обеспечения работают над увеличением емкости аккумуляторов, важно, чтобы разработчики программного обеспечения не теряли времени и правильно использовали имеющиеся возможности.

На конференции PDC Пэт Стемен (Pat Stemen) представил очень интересный доклад под названием Увеличиваем время работы аккумуляторов с помощью энергоэффективных приложений, в котором рассказал о технологических улучшениях и инструментах, представленных в Windows 7. Об управлении питанием в Windows 7 есть одна весьма интересная статья в блоге разработчиков ОС. А в этой статье мы изучим API управления питанием в Vista и сфокусируемся на управляемой библиотеке Windows Vista Bridge Library.

Разработчики могут предпринять несколько шагов, чтобы уменьшить энергопотребление приложений. Во-первых, нужно следить за тем, чтобы они минимально нагружали центральный процессор, так чтобы процессор чаще мог находиться в состоянии простоя (когда загрузка находится на уровне 2%). В случае перехода в режим простоя процессор снижает рабочую частоту своих ядер, что позволяет существенно увеличить время работы от аккумулятора. Являясь разработчиками, мы можем поддерживать низкую частоту с помощью событий и асинхронных уведомлений вместо беспрерывного опроса. Когда приложение проводит опрос с высокой частотой, оно увеличивает нагрузку на процессор и, как следствие, повышает общее энергопотребление.

Нижеприведенный график показывает, как увеличение интервала таймера увеличивает общее потребление питания. Изменение стандартной частоты опроса Windows с 15,6 до 1 миллисекунды может сократить время работы от одного заряда аккумулятора до 20%, так как частые запросы к процессору не позволят войти ему в режим ожидания. При использовании стандартного интервала опроса потребление процессором питания может находиться на уровне до 0,1 Вт, что, согласитесь, в сотню раз ниже 11 Вт, потребляемых компьютером в обычном режиме. Однако, при увеличении частоты таймера до 1 мс процессор потребляет уже 1,5 Вт, что приводит к увеличению общего энергопотребления примерно на 2 Вт.



Во-вторых, если приложение запускает службу, которая ожидает какого-либо события, как, например, подключения USB-устройства, есть ли смысл запускать ее, пока не произойдет ожидаемое событие? Данные рекомендации легко реализовать с помощью технологии Service Control Manager в Windows 7, о которой Викрам Сингх (Vikram Singh) рассказал во время своего замечательного доклада на PDC под названием Разрабатывая эффективные фоновые службы.

И последнее, но не менее важное: приложение должно быть осведомлено о типе питания. Компьютер может питаться от трех источников: электрическая сеть, встроенная батарея и источник бесперебойного питания. Осведомленность приложения означает, что оно может использовать данные из активного профиля электропитания, а значит может быть гораздо более эффективным с точки зрения энергопотребления. Приложение, к примеру, не должно запускать малоприоритетные задачи во время работы от батареи, если их можно выполнить позже, конечно же, при условии, что это не повлияет на удобство работы пользователя.

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

С этой целью мы можем использовать Windows Vista Bridge Library. В данную библиотеку включен целый раздел, посвященный связи встроенных API и .NET. В нем есть один класс, который особенно важен для приложений, использующих управляемый код, и применяется он для уведомления о типе питания. PowerManager позволяет приложению регистрировать события питания и запрашивать активный тип питания. Этот класс является статическим и программы могут получить к нему доступ в любой момент времени, запросив его свойства. PowerManager поддерживает актуальность информации, запуская фоновый процесс, который прослушивает события питания, происходящие в ОС. Этот поток никак не влияет на энергопотребление приложения.

Вот список некоторых функций и свойств, которые может предоставить PowerManager в зависимости от состояния питания:

  • PowerManager.PowerPersonality - определяет активную схему питания
  • PowerManager.PowerSource - определяет активный источник питания системы
  • PowerManager.IsBatteryPresent; - действительно в случае присутствия в системе аккумулятора (только если таковая представлена в ноутбуке)
  • PowerManager.IsUpsPresent; - определяет, присутствует ли питание от источника бесперебойного питания
  • PowerManager.IsMonitorOn; - определяет использование монитора
  • PowerManager.MonitorRequired; - определяет, активен ли монитор
  • PowerManager.IsBatteryShortTerm; - определяет, является ли аккумулятор малоемким
  • PowerManager.BatteryLifePercent; - определяет оставшееся время работы аккумулятора
  • PowerManager.GetCurrentBatteryState() - выполняет снимок актуального состояния аккумулятора и обновляет PowerManager.



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

  • PowerManager. IsMonitorOnChanged; - запускается при изменении состояния монитора
  • PowerManager.BatteryLifePercentChanged - запускается при изменении процента заряда аккумулятора
  • PowerManager.PowerPersonalityChanged - запускается каждый раз при изменении активной схемы питания
  • PowerManager. PowerSourceChanged - запускается при изменении источника питания
  • PowerManager.SystemBusyChanged - запускается, если в течение ближайшего будущего система не будет переходить в режим простоя. Приложения должны разрабатываться с учетом того, чтобы использовать преимущество данного состояния, чтобы запускать свои задания во время активной загрузки процессора, а не режима простоя.



Заметьте, что Windows Vista и Windows 7 разработаны таким образом, чтобы при любой возможности переходить в режим простоя. Однако, бывают ситуации, когда система понимает, что в ближайшее время перейти в состояние простоя не удастся из-за активных операций ввода-вывода. Система может проинформировать заинтересованное приложение о том, что она занята и не планирует переход в режим простоя. Это позволит приложению запустить свои задачи, пользуясь уже существующей высокой нагрузкой на процессор.

В Vista Bridge Library представлен пример использования PowerManager. Это простое WPF-приложение, которое с помощью PowerManager отображает активный статус питания и обновляет его при изменении состояния. При переходе ноутбука с питания от сети на аккумулятор, вы увидите, что тема Windows изменяется, и приложение зарегистрировало изменение источника питания:



Ниже представлен фрагмент кода для получения информации об источнике питания:

private void GetPowerSettings()
{
settings.PowerPersonality =
PowerManager.PowerPersonality.ToString();
settings.PowerSource =
PowerManager.PowerSource.ToString();
settings.BatteryPresent =
PowerManager.IsBatteryPresent;
settings.UpsPresent =
PowerManager.IsUpsPresent;
settings.MonitorOn =
PowerManager.IsMonitorOn;
settings.MonitorRequired =
PowerManager.MonitorRequired;
     
(PowerManager.IsBatteryPresent)
{
settings.BatteryShortTerm =
PowerManager.IsBatteryShortTerm;
settings.BatteryLifePercent =
PowerManager.BatteryLifePercent;
settings.BatteryState =
PowerManager.GetCurrentBatteryState().ToString();
}
}



А вот фрагмент кода для регистрации событий:

// Adds event handlers for PowerManager events.
private void CapturePowerManagementEvents()
{
PowerManager.IsMonitorOnChanged +=
new EventHandler(MonitorOnChanged);
PowerManager.PowerPersonalityChanged +=
new EventHandler(PowerPersonalityChanged);
PowerManager.PowerSourceChanged +=
new EventHandler(PowerSourceChanged);
if (PowerManager.IsBatteryPresent)
PowerManager.BatteryLifePercentChanged +=
new EventHandler(BatteryLifePercentChanged);

PowerManager.SystemBusyChanged +=
new EventHandler(SystemBusyChanged);
}



Теперь дело за вами. Загружайте Windows Vista Bridge Sample Library и начинайте использовать Vista Power API - они будут работать точно так, как и в Windows 7.


Источник: http://blogs.msdn.com/windev
Перевод: Zloy Kak Pё$

Комментарии

Не в сети

потребляет энергию в первую очередь процессор-печка, а не приложения

16.01.09 16:32
0
Не в сети

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

16.01.09 16:59
0
Не в сети

писал:Загружайте Windows Vista Bridge Sample Library и начинайте использовать Vista Power API - они будут работать точно так, как и в Windows 7.


Service Unavailable

17.01.09 15:05
0
Не в сети

Куда положить эту папку?

19.01.09 19:34
0
Не в сети

LOST, все работает.
Проверяйте http://code.msdn.microsoft.com/VistaBridge/Release/ProjectReleases.aspx?ReleaseId=1787
naval, Вы о чем?

23.01.09 14:19
0
Не в сети

не так выразился, как установить?

24.01.09 07:05
0
Не в сети

naval, распакуйте содержимое архива VistaBridge1.3.1.zip в папку, откройте vistabridge.sln в Visual Studio и соберите этот Solution.

26.01.09 17:17
0
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.048 секунд (Общее время SQL: 0.03 секунд - SQL запросов: 65 - Среднее время SQL: 0.00046 секунд))
Top.Mail.Ru