Повышение потребления электроэнергии и экономии заряда батареи путем минимизации фоновой работы
В этом руководстве показано, как улучшить способ использования питания приложения Windows, предлагая принципы, которые помогут повысить общую производительность устройства и время работы батареи.
Самыми основными принципами повышения потребления электроэнергии является обеспечение того, что ваше приложение находится в фоновом режиме, это не делает следующее:
- используйте системные ресурсы,
- пробуждение ЦП через таймеры,
- пробуждение ЦП, ожидая событий vsync.
Будучи "в фоновом режиме" означает, что ваше приложение не отображается и не слышно для пользователя. В фоновом режиме должно быть несколько причин для пробуждения ЦП или использования системных ресурсов. Проверка того, активирует ли ваше приложение эти события и решает причину, может значительно улучшить потребление энергии вашего приложения, время работы батареи и уменьшить выбросы углерода, которые будут возникать у клиентов, использующих ваше приложение.
Чтобы убедиться, что ЦП не просыпается, чтобы выполнять ненужные действия, пока ваше приложение не используется, можно записать и проанализировать трассировку с помощью Windows Анализатор производительности (WPA). Мы рассмотрим шаги, объясняющие, как это сделать ниже.
Запись трассировки и проверка ненужных работ
Важно настроить правильные условия при запуске приложения, прежде чем записывать трассировку, чтобы проанализировать, выполняется ли ненужная работа, которая может стекать мощность. Вы также можете запустить несколько трассировок, чтобы протестировать приложение в различных условиях.
Настройка
Получите тестовое устройство для простоя, открыв диспетчер задач и гарантируя, что загрузка ЦП меньше 5%. Это позволит свести к минимуму помех измерения и обеспечить разумные трассировки размера.
Запустите приложение и перейдите к представлению, которое обычно используется.
Свести к минимуму приложение. *Вы можете повторить следующие шаги, пока окно приложения полностью заблокировано (заблокировано от просмотра) за другими окнами и когда ваше приложение находится на переднем плане, после периода без взаимодействия с пользователем, чтобы убедиться, что ненужная работа не инициируется приложением.
Измерение и оценка использования ЦП в фоновом режиме
Откройте командную строку (PowerShell или командную строку) в режиме администратора. (Если не выполняться в режиме администрирования, может появиться код ошибки: 0xc5585011 "Не удалось включить политику для профилирования производительности системы".
Введите команду:
wpr -start power -filemode
.Оставьте устройство бездействия в течение 5 минут.
Введите команду:
wpr -stop idletrace.etl
.Чтобы открыть трассировку с помощью Windows Анализатор производительности (WPA), введите команду:
wpa.exe idletrace.etl
Откройте граф "Точное использование ЦП вычислений>".
Перейдите к процессу (или если у вас есть многопроцессная модель всех процессов, связанных с приложением) и оцените количество cswitch , "Использование ЦП". В идеале они находятся как можно ближе к 0, пока приложение находится в фоновом режиме. Просмотр стеков — отличный способ найти, где используются ресурсы и как его улучшить.
Найдите чрезмерные пробуждения, добавив "Новый стек потоков", чтобы увидеть, какой стек проснулся поток.
Откройте граф использования ЦП вычислений >(пример). Отслеживайте проблемы с загрузкой ЦП, оценивая время выполнения в коде.
Измерение и оценка ожидания vsync в фоновом режиме
Примечание.
Прежде чем изучать этот более сложный сценарий, сосредоточьтесь на базовом использовании ЦП в предыдущем разделе.
Откройте командную строку (PowerShell или командную строку) в режиме администратора.
Введите команду:
wpr -start gpu -filemode
.Оставьте устройство бездействия в течение 5 минут.
Введите команду:
wpr -stop gputrace.etl
.Чтобы открыть трассировку с помощью Windows Анализатор производительности (WPA), введите команду:
wpa.exe gputrace.etl
Откройте граф универсальных событий системного действия>.
- Отфильтруйте события Microsoft-Windows-Dxgkrnl.
- Перетащите столбец "Процесс", чтобы быть 2-м столбцом.
- Проверьте, вызывается ли вы в WaitForVsync. Например, через API, такие как IDXGIOutput::WaitForVBlank (dxgi.h) через
WaitForVerticalBlankEventInternal
событие.
Дополнительные сведения см. в статье Об использовании Windows Анализатор производительности для анализа современных резервных проблем.
Дополнительные ресурсы
Windows developer