通过最大程度减少后台工作来降低能耗并延长电池使用时间
本指南将演示如何改进 Windows 应用程序耗电方式,并提供有助于提高整体设备性能和电池使用时间的原则。
要降低能耗,最基本原则是确保应用在后台运行时,不会出现以下情况:
- 使用系统资源、
- 通过计时器唤醒 CPU、
- 通过等待 vsync 事件唤醒 CPU。
“后台运行”意味着用户看不到也听不到你的应用。 很少(如果有)有理由在后台运行时唤醒 CPU 或利用系统资源。 可通过检查应用是否触发了这些事件并解决原因,显著降低应用能耗、延长电池使用时间以及减少使用应用的客户产生的碳排放量。
要检查是否会在未使用应用时唤醒 CPU 以执行不必要的工作,可以使用 Windows Performance Analyzer (WPA) 捕获和分析跟踪。 下面逐步介绍如何执行此操作。
在捕获跟踪以分析是否正在执行可能耗尽电量的不必要工作之前,必须设置运行应用时的正确条件。 你可能还想要运行多个跟踪,以在各种条件下测试应用。
通过打开任务管理器并确保 CPU 利用率小于 5%,使测试设备处于空闲状态。 这样做将最大程度地减少测量干扰并提供合理的大小跟踪。
启动应用并导航到预期常用的视图。
最小化应用。 *为了确保应用不会启动不必要的工作,你可能想要在以下情况下重复以下步骤:当你的应用窗口被其他窗口完全遮挡(看不到)时、当你的应用位于前台时,在用户一段时间没有与之交互后。
在管理员模式下打开命令行(PowerShell 或命令提示符)。 (如果未在管理员模式下运行,可能会收到错误代码:0xc5585011,“无法启用分析系统性能的策略。”)
输入命令:
wpr -start power -filemode
将设备空闲 5 分钟。
输入命令:
wpr -stop idletrace.etl
要使用 Windows Performance Analyzer (WPA) 打开跟踪,输入命令:
wpa.exe idletrace.etl
打开“计算”>“CPU 使用率(精确)”图。
导航到进程(或者如果你具有全部进程与应用相关的多进程模型),然后评估 Cswitch 计数“CPU 利用率”。 理想情况下,当应用处于后台时,这些值几乎为 0。 建议通过查看堆栈查找正在使用资源的位置以及如何进行改进。
通过添加“新建线程堆栈”查看唤醒线程的堆栈,来查找过度唤醒。
打开“计算”>“CPU 使用率(采样)”图。 通过评估代码中执行所花费的时间的位置来跟踪 CPU 利用率问题。
备注
在调查此更高级的应用场景之前,重点关注上一节中的基本 CPU 利用率。
在管理员模式下打开命令行(PowerShell 或命令提示符)。
输入命令:
wpr -start gpu -filemode
将设备保持空闲 5 分钟。
输入命令:
wpr -stop gputrace.etl
要使用 Windows Performance Analyzer (WPA) 打开跟踪,输入命令:
wpa.exe gputrace.etl
打开“系统活动”>“泛型事件”图。
- 筛选为“Microsoft-Windows-Dxgkrnl”事件。
- 将 “进程 ”列拖到第二列。
- 检查是否正在调用 WaitForVsync。 例如,利用 IDXGIOutput::WaitForVBlank (dxgi.h) 等 API 通过
WaitForVerticalBlankEventInternal
事件。
有关详细信息,请参阅使用 Windows Performance Analyzer 分析新式待机问题。