通过最大程度减少后台工作来降低能耗并延长电池使用时间

本指南将演示如何改进 Windows 应用程序耗电方式,并提供有助于提高整体设备性能和电池使用时间的原则。

要降低能耗,最基本原则是确保应用在后台运行时,不会出现以下情况:

  • 使用系统资源、
  • 通过计时器唤醒 CPU、
  • 通过等待 vsync 事件唤醒 CPU。

“后台运行”意味着用户看不到也听不到你的应用。 很少(如果有)有理由在后台运行时唤醒 CPU 或利用系统资源。 可通过检查应用是否触发了这些事件并解决原因,显著降低应用能耗、延长电池使用时间以及减少使用应用的客户产生的碳排放量

要检查是否会在未使用应用时唤醒 CPU 以执行不必要的工作,可以使用 Windows Performance Analyzer (WPA) 捕获和分析跟踪。 下面逐步介绍如何执行此操作。

捕获跟踪并检查是否存在不必要的工作

在捕获跟踪以分析是否正在执行可能耗尽电量的不必要工作之前,必须设置运行应用时的正确条件。 你可能还想要运行多个跟踪,以在各种条件下测试应用。

安装

  1. 通过打开任务管理器并确保 CPU 利用率小于 5%,使测试设备处于空闲状态。 这样做将最大程度地减少测量干扰并提供合理的大小跟踪。

  2. 启动应用并导航到预期常用的视图。

  3. 最小化应用。 *为了确保应用不会启动不必要的工作,你可能想要在以下情况下重复以下步骤:当你的应用窗口被其他窗口完全遮挡(看不到)时、当你的应用位于前台时,在用户一段时间没有与之交互后。

在后台测量和评估 CPU 使用率

  1. 管理员模式下打开命令行(PowerShell 或命令提示符)。 (如果未在管理员模式下运行,可能会收到错误代码:0xc5585011,“无法启用分析系统性能的策略。”)

  2. 输入命令:wpr -start power -filemode

  3. 将设备空闲 5 分钟。

  4. 输入命令:wpr -stop idletrace.etl

  5. 要使用 Windows Performance Analyzer (WPA) 打开跟踪,输入命令:wpa.exe idletrace.etl

  6. 打开“计算”>“CPU 使用率(精确)”图

    • 导航到进程(或者如果你具有全部进程与应用相关的多进程模型),然后评估 Cswitch 计数“CPU 利用率”。 理想情况下,当应用处于后台时,这些值几乎为 0。 建议通过查看堆栈查找正在使用资源的位置以及如何进行改进。

    • 通过添加“新建线程堆栈”查看唤醒线程的堆栈,来查找过度唤醒。

    显示 CPU 进程、计数和使用率百分比的 WPA 图

  7. 打开“计算”>“CPU 使用率(采样)”图。 通过评估代码中执行所花费的时间的位置来跟踪 CPU 利用率问题。

测量和评估在后台等待的 vsync

注意

在调查此更高级的应用场景之前,重点关注上一节中的基本 CPU 利用率。

  1. 在管理员模式下打开命令行(PowerShell 或命令提示符)。

  2. 输入命令:wpr -start gpu -filemode

  3. 将设备保持空闲 5 分钟。

  4. 输入命令:wpr -stop gputrace.etl

  5. 要使用 Windows Performance Analyzer (WPA) 打开跟踪,输入命令:wpa.exe gputrace.etl

  6. 打开“系统活动”>“泛型事件”图。

    • 筛选为“Microsoft-Windows-Dxgkrnl”事件。
    • 将 “进程 ”列拖到第二列。
    • 检查是否正在调用 WaitForVsync。 例如,利用 IDXGIOutput::WaitForVBlank (dxgi.h) 等 API 通过 WaitForVerticalBlankEventInternal 事件。

    显示 MS Edge webview2 事件的 WPA 图

有关详细信息,请参阅使用 Windows Performance Analyzer 分析新式待机问题

其他资源