Повышение потребления электроэнергии и экономии заряда батареи путем минимизации фоновой работы

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

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

  • используйте системные ресурсы,
  • пробуждение ЦП через таймеры,
  • пробуждение ЦП, ожидая событий vsync.

Будучи "в фоновом режиме" означает, что ваше приложение не отображается и не слышно для пользователя. В фоновом режиме должно быть мало или совсем не быть причин для пробуждения ЦП или использования системных ресурсов. Проверка того, активирует ли ваше приложение эти события и решает причину, может значительно улучшить потребление энергии вашего приложения, время работы батареи и уменьшить выбросы углерода, которые будут возникать у клиентов, использующих ваше приложение.

Чтобы убедиться, что ЦП не просыпается, чтобы не выполнять ненужные действия, пока ваше приложение не используется, можно записать и проанализировать трассировку с помощью анализатора производительности Windows (WPA). Мы рассмотрим шаги, объясняющие, как это сделать ниже.

Запись трассировки и проверка ненужных работ

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

Setup

  1. Переведите тестовое устройство в режим простоя, открыв Диспетчер задач (Task Manager) и убедившись, что использование ЦП меньше 5%. Это позволит свести к минимуму помехи при измерении и обеспечить разумные размеры трассировок.

  2. Запустите приложение и перейдите на экран, который ожидается будет обычно использоваться.

  3. Свести к минимуму приложение. *Вы можете повторить следующие шаги, пока окно приложения полностью заблокировано (заблокировано от просмотра) за другими окнами и когда ваше приложение находится на переднем плане, после периода без взаимодействия с пользователем, чтобы убедиться, что ненужная работа не инициируется приложением.

Измерение и оценка использования ЦП в фоновом режиме

  1. Откройте командную строку (PowerShell или командную строку) в режиме администратора. (Если не запустить в режиме администратора, может появиться код ошибки: 0xc5585011, "Не удалось включить политику для профилирования производительности системы.")

  2. Введите команду : wpr -start power -filemode

  3. Оставьте устройство бездействия в течение 5 минут.

  4. Введите команду : wpr -stop idletrace.etl

  5. Чтобы открыть трассировку с помощью анализатора производительности Windows (WPA), введите команду: wpa.exe idletrace.etl

  6. Откройте график Вычисления>Точное использование ЦП.

    • Перейдите к вашему процессу (или, если у вас многопроцессная модель, ко всем процессам, связанным с вашим приложением) и оцените количество Cswitch и "Использование ЦП". В идеале они находятся как можно ближе к 0, пока приложение находится в фоновом режиме. Просмотр стеков — отличный способ определить, где используются ресурсы и как их улучшить.

    • Найдите чрезмерные пробуждения, добавив "Новый стек потока", чтобы узнать, на каком стеке был пробужден поток.

    График WPA с процессом ЦП, подсчетом и процентом использования

  7. Откройте граф использования ЦП вычислений>(пример). Отслеживайте проблемы с загрузкой ЦП, оценивая, где в коде тратится время выполнения.

Измерение и оценка времени ожидания vsync в фоновом режиме

Замечание

Прежде чем изучать этот более сложный сценарий, сосредоточьтесь на базовом использовании ЦП в предыдущем разделе.

  1. Откройте командную строку (PowerShell или командную строку) в режиме администратора.

  2. Введите команду : wpr -start gpu -filemode

  3. Оставьте устройство в неактивном состоянии в течение 5 минут.

  4. Введите команду : wpr -stop gputrace.etl

  5. Чтобы открыть трассировку с помощью анализатора производительности Windows (WPA), введите команду: wpa.exe gputrace.etl

  6. Откройте графуниверсальных событий системного действия>.

    • Отфильтруйте события для "Microsoft-Windows-Dxgkrnl."
    • Перетащите столбец "Процесс ", чтобы быть 2-м столбцом.
    • Проверьте, вызываете ли вы функцию WaitForVsync. Например, через API, такие как IDXGIOutput::WaitForVBlank (dxgi.h) через WaitForVerticalBlankEventInternal событие.

    Граф WPA с событием MS Edge webview2

Дополнительные сведения см. в статье с помощью анализатора производительности Windows для анализа современных проблем в режиме ожидания.

Дополнительные ресурсы