バックグラウンド作業を最小限に抑えることによる、消費電力とバッテリ寿命の改善:
このガイドでは、Windows アプリケーションが電力を消費する方法を改善する方法について説明し、デバイスの全体的なパフォーマンスとバッテリ寿命の向上に役立つ原則を提供します。
電力消費量を改善するための最も基本的な原則は、アプリがバックグラウンドにある間は、次のことがないようにすることです。
- システム リソースを使用する
- タイマーを介して CPU をスリープ解除する
- vsync イベントを待機して CPU をスリープ解除します。
"バックグラウンド" とは、アプリがユーザーに表示されず、聞こえないことを意味します。 バックグラウンドで CPU をスリープ解除したり、システム リソースを利用したりする理由はほとんどありません (ある場合)。 アプリがこれらのイベントをトリガーしているかどうかを確認し、原因に対処すると、アプリの電力消費量、バッテリ寿命が大幅に向上し、アプリを使用する顧客による二酸化炭素排出量を削減できます。
アプリが使用されていない間に不要な作業を行うために CPU が目覚めないことをチェックするには、Windows パフォーマンス アナライザー (WPA)を使用してトレースをキャプチャして分析できます。 その方法を以下で説明する手順について説明します。
トレースをキャプチャする前に、アプリを実行するときに正しい条件を設定して、電力を消費する可能性のある不要な作業が実行されているかどうかを分析することが重要です。 また、さまざまな条件下でアプリをテストするために、複数のトレースを実行することもできます。
タスク マネージャーを開き、CPU 使用率が 5% 未満であることを確認して、テスト デバイスをアイドル状態にします。 これにより、測定の干渉を最小限に抑え、妥当なサイズ トレースを提供します。
アプリを起動し、一般的に使用されることが予想されるビューに移動します。
リスクを最小限に抑える *アプリウィンドウが他のウィンドウの背後で完全に隠れている(ビューからブロックされる)間、およびアプリがフォアグラウンドにある場合は、ユーザーによる操作が一切行われなかった後に、不要な作業がアプリによって開始されないようにするために、次の手順を繰り返す必要があります。
管理者モードでコマンド ライン (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" イベントにフィルター処理します。
- [プロセス] 列を 2 番目の列にドラッグします。
- WaitForVsync を呼び出しているかどうかを確認します。 たとえば、IDXGIOutput::WaitForVBlank (dxgi.h)などの API を使用して
WaitForVerticalBlankEventInternal
イベントを実行します。
詳細については、「Windows Performance Analyzer を使用したモダン スタンバイに関する問題の分析」を参照してください。
Windows developer に関するフィードバック
Windows developer はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。