共用方式為


透過減少背景工作來提升功耗與電池續航

本指南將示範如何改善 Windows 應用程式的耗電方式,並提供原則,幫助你提升整體裝置效能與電池續航力。

改善功耗的最基本原則是確保當你的應用程式在背景運作時,它不會:

  • 使用系統資源,
  • 透過計時器喚醒 CPU,
  • 透過等待 vsync 事件喚醒 CPU。

「處於背景」的意思是你的應用程式對使用者既看不見也聽不到。 在背景運作時,幾乎沒有理由喚醒 CPU 或使用系統資源。 檢查你的應用程式是否觸發這些事件並加以解決原因,能大幅提升應用程式的耗電量、電池續航力,並減少用戶 使用應用程式所產生的碳排放

為了檢查 CPU 不會在應用程式未被使用時喚醒來做不必要的工作,你可以使用 Windows 效能分析器(WPA)擷取並分析一段追蹤。 我們將在下面一步步說明如何做到。

擷取追蹤記錄並檢查不必要的工作

在執行應用程式時,在擷取追蹤前設置正確的條件非常重要,以分析是否有不必要的工作可能耗電。 您可能還需要執行多次追蹤,以便在各種條件下測試您的應用程式。

設定

  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。 查看書庫是了解資源使用情況及改進的好方法。

    • 透過新增「新執行緒堆疊」來查看執行緒在何處堆疊中喚醒,以觀察過多的喚醒。

    WPA 圖表顯示 CPU 處理量、數量及使用百分比

  7. 打開>計算CPU 使用率(取樣)圖表。 透過評估程式碼內的執行時間分佈,來確定 CPU 使用率問題。

在背景中測量並評估垂直同步等待時間

備註

在探討這個更進階的情境之前,請先專注於前一節的基本 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」事件。
    • Process 欄位拖曳到第 2 欄。
    • 請確認你是否正在呼叫 WaitForVsync。 例如,透過像 IDXGIOutput::WaitForVBlank (dxgi.h) 這類 API,可以透過WaitForVerticalBlankEventInternal事件觸發。

    顯示 MS Edge webview2 事件的 WPA 圖表

欲了解更多,請參閱《 使用 Windows 效能分析器分析現代待機問題》一文。

其他資源