通过


通过最大程度地减少后台工作来提高能耗和电池使用时间

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

改善能耗的最基本原则是确保应用在后台运行时,不会:

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

“在后台”意味着你的应用对用户不可见,也不能听到。 在后台唤醒 CPU 或利用系统资源时,几乎没有理由这样做。 检查应用是否触发了这些事件并解决原因,可以显著改善应用的能耗、电池使用时间以及 减少使用你的应用的客户产生的碳排放量。

若要检查 CPU 未唤醒以在应用未使用时执行不必要的工作,可以使用 Windows 性能分析器(WPA)捕获和分析跟踪。 我们将逐步讲解以下步骤,说明如何执行此操作。

捕获跟踪记录并检查不必要的工作

在捕获跟踪之前,请务必在运行应用时设置正确的条件,以分析是否正在执行可能耗尽电源的不必要的工作。 你可能还想进行多次追踪,以便在各种条件下测试您的应用程序。

Setup

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

  2. 启动您的应用,并导航到预计常用的界面。

  3. 最小化应用。 *你可能想在应用窗口完全被其他窗口遮挡时,以及在用户一段时间没有交互后应用处于前台时,重复以下步骤,以确保应用不会启动不必要的工作。

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

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

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

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

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

  5. 若要使用 Windows 性能分析器(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 性能分析器(WPA)打开跟踪,请输入以下命令: wpa.exe gputrace.etl

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

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

    显示 MS Edge webview2 事件的 WPA 图

若要了解详细信息,请参阅 使用 Windows 性能分析器分析新式待机问题的文章。

其他资源