ストア アプリでのエネルギー使用の分析
Visual Studio のエネルギー消費量プロファイラーは、常時または一時的に内蔵バッテリで動作する低電力のタブレット デバイス上で、Windows ストア アプリによる電力とエネルギーの消費量を分析するために役立ちます。 バッテリ電源デバイスでは、エネルギー消費量が多すぎるアプリはユーザーに嫌われ、アンインストールされる場合もあります。 エネルギー使用を最適化することで、ユーザーがそのアプリを選択する可能性が高まり、使用頻度も向上させることができます。
内容
エネルギー消費量プロファイラーの概要、しくみ、および測定対象
ユーザー マークの付いたシナリオの指定
プロファイリング用の環境の構成
アプリのエネルギー プロファイル データの収集
インストール済みのアプリのエネルギー プロファイル データの収集
エネルギー プロファイル データの分析
エネルギー使用の最適化
その他のリソース
エネルギー消費量プロファイラーの概要、しくみ、および測定対象
エネルギー消費量プロファイラーは、プロファイル セッション中のデバイスのディスプレイ、CPU、およびネットワーク接続のアクティビティをキャプチャします。 次に、そのアクティビティに使用される電力と、プロファイル セッションのエネルギーの総量の見積もりを生成します。
注意
エネルギー プロファイラーでの電力とエネルギーの使用量の見積もりには、アプリケーションが実行される低電力のタブレット デバイスを示す、標準参照デバイス ハードウェアのソフトウェア モデルが使用されます。最適な見積もりを提供するために、低電力のタブレット デバイスでプロファイル データを収集することをお勧めします。
このモデルを使用すると、さまざまな低電力デバイスにおける適切な見積もりを生成できますが、プロファイルの対象となるデバイスの実際の値と異なることがよくあります。他のリソースの使用と比べて比較的負荷の大きい、ディスプレイ、CPU、およびネットワーク接続のアクティビティの値を調べて使い、最適化の候補にします。
エネルギー消費量プロファイラーでは、電力とエネルギーを次のように定義しています。
電力は、一定の時間内に行われる仕事のために力が使用される割合を測定します。 電気の分野では、電力の標準単位はワットです。ワットは、1 アンペアの電流が 1 ボルトの電位差を通じて流れるときに行われる仕事の割合として定義されています。 [消費電力] グラフでは、単位はワットの 1,000 分の 1 (10 -3) であるミリワット (mW) で表示されます。
電力は割合であるため、方向 (一定時間内で仕事が増加するか減少するか) と速度 (仕事が増加したり減少したりする量) があることに注意してください。
エネルギーは、能力または潜在力として、バッテリの電力容量として、または一定の時間内に消費された総電力量として、電力の総量を表します。 エネルギーの単位はワット時です。これは、1 ワットが 1 時間にわたって常に使用される場合の電力量です。 [Energy Summary] (エネルギー使用の概要) では、単位はミリワット時間 (mW-h) で表示されます。
たとえば、タブレットの完全に充電されたバッテリには、一定量のエネルギーが蓄えられています。 エネルギーは、ネットワーク経由での通信、値の計算、グラフィックスの表示などのタスクを行うために使用され、バッテリの電力が消費される速度もさまざまです。 一定の期間内に消費された総電力も、エネルギーで測定されます。
ユーザー マークの付いたシナリオの指定
また、タイムライン ルーラーの領域を識別できるようにプロファイル データにユーザー マークを追加できます。
マークは、タイムライン上でメソッドが実行された時点に、オレンジ色の三角形として表示されます。 マークの上にマウス ポインターを置くと、メッセージと時刻がツールヒントとして表示されます。 複数のユーザー マークが近接している場合、マークはマージされてツールヒントのデータはまとめられます。 タイムラインの表示を拡大すると、マークを分離できます。
C#、Visual Basic、C++ コードへのマークの追加
C#、Visual Basic、C++ コードにユーザー マークを追加するには、まず Windows.Foundation.Diagnostics LoggingChannel オブジェクトを作成します。 次に、コード内のマークしたい位置に LoggingChannel.LogMessage メソッドの呼び出しを挿入します。 呼び出しでは、LoggingLevel.Information を使用します。
メソッドが実行されると、ユーザー マークがメッセージと共にプロファイル データに追加されます。
注意
-
Windows.Foundation.Diagnostics LoggingChannel は Windows.Foundation.IClosable インターフェイス (C# および VB で System.IDisposable として投影) を実装します。オペレーティング システム リソースのリークを防ぐには、ログ チャンネルで終了するときに LoggingChannel.CloseClose() (Dispose()in C# and VB) を呼び出します。
-
ログを開く各チャネルには一意の名前が指定されている必要があります。破棄されていないチャンネルと同じ名前の新しいログ チャンネルを作成しようとすると、例外が発生します。
例については、Windows SDK サンプル LoggingSession Sample を参照してください。
マークの JavaScript コードへの追加
ユーザー マークを追加するには、マークするコードの位置に次のコードを追加します。
if (performance && performance.mark) {
performance.mark(markDescription);
}
markDescription は、ユーザー マークのツールヒントに表示されるメッセージを含む文字列です。
プロファイリング用の環境の構成
正確な見積もりを取得するために、バッテリが電源になっている低電力デバイス上でのアプリのエネルギー使用をプロファイリングします。 Visual Studio は、これらのほとんどのデバイスでは実行されないので、Visual Studio リモート ツールを使用して、Visual Studio コンピューターをデバイスに接続する必要があります。 リモート デバイスに接続するには、Visual Studio プロジェクトとリモート デバイスの両方を構成する必要があります。 詳細については、「リモート マシンでの Visual Studio からの Windows ストア アプリの実行」を参照してください。
ヒント
-
Windows ストア シミュレーターまたは Visual Studio コンピューターでエネルギー プロファイリングを実行することはお勧めできません。実際のデバイスでプロファイリングを実行する方が、はるかに現実的なデータを取得できます。
-
ターゲット デバイスがバッテリから電力を得ている間、プロファイリングを行います。
-
同じリソース (ネットワーク、CPU、またはディスプレイ) を使用する可能性がある他のアプリを閉じます。
アプリのエネルギー プロファイル データの収集
[デバッグ] メニューの [パフォーマンスと診断] をクリックします。
[エネルギー消費量] をクリックし、[開始] をクリックします。
注意
エネルギー消費量プロファイラーを開始したとき、VsEtwCollector.exe を実行するアクセス許可を要求する [ユーザー アカウント制御] ウィンドウが表示される場合があります。[はい] をクリックします。
データを収集するには、アプリケーションを実行します。
プロファイリングを停止するには、Visual Studio に戻り (Alt + Tab)、診断ハブのページの [コレクションの停止] をクリックします。
Visual Studio は、収集されたデータを分析し、結果を表示します。
インストール済みのアプリのエネルギー プロファイル データの収集
エネルギー消費量ツールは、Visual Studio ソリューションから起動された Window 8.1 ストア アプリまたは Windows ストアからインストールされた Window 8.1 ストア アプリのみで実行できます。 ソリューションを Visual Studio で開いている場合、既定のターゲットは [スタートアップ プロジェクト] です。 インストールされているアプリケーションをターゲットにするには:
[ターゲットの変更] を選択し、[インストールされているアプリ] を選択します。
[インストールされているアプリケーション パッケージの選択] の一覧から、ターゲットをクリックします。
診断ハブのページで [エネルギー消費量] をクリックします。
[開始] をクリックして、プロファイリングを開始します。
プロファイリングを停止するには、Visual Studio に戻り (Alt + Tab)、診断ハブのページの [コレクションの停止] をクリックします。
エネルギー プロファイル データの分析
エネルギー プロファイル データは、Visual Studio のドキュメント ウィンドウに次のように表示されます。
レポート ファイルの名前は、ReportYYYYMMDD-HHMM.diagsession という形式になります。 レポートを保存する場合は、名前を変更できます。 |
|
タイムラインは、プロファイル セッションの長さ、アプリケーションのアクティブ化ライフサイクル イベント、ユーザー マークを示します。 |
|
青いバーをドラッグしてタイムラインの領域を選択することにより、レポートをタイムラインの一部だけに制限できます。 |
|
[消費電力] グラフは、プロファイル セッション中にデバイス リソースによって引き起こされる電源出力の変化を系列別に表示する折れ線グラフです。 エネルギー消費量プロファイラーは、CPU、ネットワーク アクティビティ、および画面表示によって使用された電力を追跡します。 |
|
[リソース (オン/オフ)] グラフは、ネットワークのエネルギー コストの詳細を示します。 [ネットワーク] バーは、ネットワーク接続が開かれていた時間を表します。 [データ転送] 子バーは、アプリがネットワーク経由でデータを受信または送信していた時間です。 |
|
[エネルギー使用の概要] は、選択されたタイムラインで CPU、ネットワーク アクティビティ、および画面表示によって使用された総エネルギーの割合を示します。 |
エネルギー プロファイル データを分析するには
リソースの電力がピークになっている領域を探します。 ピーク領域をアプリの機能に関連付けます。 次に、タイムラインのコントロール バーを使用して、その領域を拡大表示します。 ネットワーク使用量に注目している場合は、[リソース (オン/オフ)] グラフの [ネットワーク] ノードを展開して、ネットワーク接続が開かれていた時間とアプリがネットワーク経由でデータを受信または転送していた時間を比較します。 不必要にネットワークが開かれている時間を短縮することは、非常に有効な最適化です。
エネルギー使用の最適化
ネットワーク接続では、データ送信の他にも、接続の初期化、維持、およびシャットダウンにエネルギー コストが発生します。 一部のネットワークでは、データの送受信後も一定期間接続を維持することで、1 つの接続でさらにデータを送信できるようになっています。 [リソース (オン/オフ)] ウィンドウを使用して、アプリが接続とどのように連係しているかを調べることができます。
[ネットワーク] バーと [データ転送] バーが、一連の小さいデータ パケットを断続的に送信するために接続が長期間開かれていることを示している場合は、データをバッチ処理して 1 回の伝送で送信することで、ネットワークが開かれている時間を短縮し、エネルギー コストを削減することができます。
ディスプレイのエネルギー コストは、あまり制御できません。 ほとんどの画面では、暗い色より明るい色を表示する場合に多くのエネルギーが必要になるため、暗い背景を使用することはコストを削減する方法の 1 つです。
その他のリソース
Windows デベロッパー センターの C#/VB/C++ と XAML および JavaScript と HTML の「接続状態とコストの管理」セクションでは、ネットワーク接続情報を提供する Windows API について説明しています。この情報を使って、アプリはネットワーク トラフィックのコストを最小限にすることができます。
Windows ストア アプリ用の Visual Studio シミュレーターでは、ネットワーク情報 API のデータ接続プロパティをシミュレートすることができます。 「シミュレーターでの Windows ストア アプリの実行」を参照してください。
JavaScript 関数タイミングおよび CPU 使用率ツールは、非効率的な関数のために生じる CPU 負荷の削減に役立ちます。 「ストア アプリにおける CPU 使用率の分析」、「ローカル コンピューターのストア アプリにおける JavaScript 関数タイミング データの収集」、および「リモート デバイスのストア アプリにおける JavaScript 関数タイミング データの収集」を参照してください。