Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как улучшить способ использования питания приложения Windows, предлагая принципы, которые помогут повысить общую производительность устройства и время работы батареи.
Основные принципы оптимизации энергопотребления сводятся к тому, чтобы ваше приложение, находясь в фоновом режиме, не выполняло следующие действия:
- используйте системные ресурсы,
- пробуждение ЦП через таймеры,
- пробуждение ЦП, ожидая событий vsync.
Будучи "в фоновом режиме" означает, что ваше приложение не отображается и не слышно для пользователя. В фоновом режиме должно быть мало или совсем не быть причин для пробуждения ЦП или использования системных ресурсов. Проверка того, активирует ли ваше приложение эти события и решает причину, может значительно улучшить потребление энергии вашего приложения, время работы батареи и уменьшить выбросы углерода, которые будут возникать у клиентов, использующих ваше приложение.
Чтобы убедиться, что ЦП не просыпается, чтобы не выполнять ненужные действия, пока ваше приложение не используется, можно записать и проанализировать трассировку с помощью анализатора производительности Windows (WPA). Мы рассмотрим шаги, объясняющие, как это сделать ниже.
Запись трассировки и проверка ненужных работ
Важно настроить правильные условия работы приложения, прежде чем приступать к получению трассировки, чтобы проанализировать, выполняется ли ненужная работа, которая может расходовать мощность. Вы также можете запустить несколько трассировок, чтобы протестировать приложение в различных условиях.
Setup
Переведите тестовое устройство в режим простоя, открыв Диспетчер задач (Task Manager) и убедившись, что использование ЦП меньше 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