本指南將示範如何改善 Windows 應用程式的耗電方式,並提供原則,幫助你提升整體裝置效能與電池續航力。
改善功耗的最基本原則是確保當你的應用程式在背景運作時,它不會:
- 使用系統資源,
- 透過計時器喚醒 CPU,
- 透過等待 vsync 事件喚醒 CPU。
「處於背景」的意思是你的應用程式對使用者既看不見也聽不到。 在背景運作時,幾乎沒有理由喚醒 CPU 或使用系統資源。 檢查你的應用程式是否觸發這些事件並加以解決原因,能大幅提升應用程式的耗電量、電池續航力,並減少用戶 使用應用程式所產生的碳排放。
為了檢查 CPU 不會在應用程式未被使用時喚醒來做不必要的工作,你可以使用 Windows 效能分析器(WPA)擷取並分析一段追蹤。 我們將在下面一步步說明如何做到。
擷取追蹤記錄並檢查不必要的工作
在執行應用程式時,在擷取追蹤前設置正確的條件非常重要,以分析是否有不必要的工作可能耗電。 您可能還需要執行多次追蹤,以便在各種條件下測試您的應用程式。
設定
打開工作管理員,確保 CPU 使用率低於 5%,讓測試裝置進入閒置狀態。 這樣做能減少測量干擾並提供合理的尺寸軌跡。
啟動你的應用程式,並導向預期會被廣泛使用的界面。
盡量簡化你的應用程式。 你可能想在應用程式視窗完全被其他視窗遮蔽時,以及在應用程式在前景且使用者一段時間未進行互動後,重複以下步驟,以確保應用程式不會啟動不必要的工作。
在背景中測量並評估 CPU 使用情況
在管理員模式下開啟命令列(PowerShell 或命令提示字元)。 (若未以管理員模式執行,可能會收到錯誤代碼:0xc5585011,「未能啟用系統效能剖析政策。」)
輸入指令:
wpr -start power -filemode讓裝置閒置 5 分鐘。
輸入指令:
wpr -stop idletrace.etl要使用 Windows 效能分析器(WPA)開啟追蹤,請輸入以下指令:
wpa.exe idletrace.etl打開>計算CPU 使用率(精確)圖表。
導覽至你的程序(或如果你有多程序架構,則是所有與應用程式相關的程序),評估 Cswitch 數量及「CPU 利用率」。 理想狀況是這些值在應用程式在背景執行時盡可能接近 0。 查看書庫是了解資源使用情況及改進的好方法。
透過新增「新執行緒堆疊」來查看執行緒在何處堆疊中喚醒,以觀察過多的喚醒。
打開>計算CPU 使用率(取樣)圖表。 透過評估程式碼內的執行時間分佈,來確定 CPU 使用率問題。
在背景中測量並評估垂直同步等待時間
備註
在探討這個更進階的情境之前,請先專注於前一節的基本 CPU 使用情況。
在管理員模式下開啟 命令列 (PowerShell 或命令提示字元)。
輸入指令:
wpr -start gpu -filemode讓裝置閒置5分鐘。
輸入指令:
wpr -stop gputrace.etl要使用 Windows 效能分析器(WPA)開啟追蹤,請輸入以下指令:
wpa.exe gputrace.etl打開 系統活動的>通用事件 圖表。
- 篩選到「Microsoft-Windows-Dxgkrnl」事件。
- 將 Process 欄位拖曳到第 2 欄。
- 請確認你是否正在呼叫 WaitForVsync。 例如,透過像 IDXGIOutput::WaitForVBlank (dxgi.h) 這類 API,可以透過
WaitForVerticalBlankEventInternal事件觸發。
欲了解更多,請參閱《 使用 Windows 效能分析器分析現代待機問題》一文。