MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 で Windows Phone アプリケーション分析を使用して一般的なパフォーマンスの問題を識別および解決する方法

Windows Phone アプリケーション分析ツールを使用して、アプリのパフォーマンスの問題を識別できます。アプリの監視またはプロファイリングを行った後、CPU 使用率が高い領域またはフレーム レートが低い領域などの目的のセクションをタイムラインで強調表示して、選択したセクションの詳細なパフォーマンス分析を表示できます。アプリケーション分析ツールの多くのパフォーマンス警告によって、問題を調査しやすくなります。たとえば、"フレーム描画以外の操作に対する CPU 使用率が高い" は、フレーム描画の処理を向上するため、UI スレッドのブロック解除または負荷軽減の方策を取る必要があることを示します。ただし、他の警告を調べるために行う必要がある処理は明確ではありません。このトピックでは、アプリケーション分析ツールを使用して一般的なパフォーマンスの問題を識別して解決する方法について説明します。

このトピックは、次のセクションで構成されています。

このセクションでは、アニメーションに関連する一般的なパフォーマンスの問題を識別し解決する方法について説明します。

キャッシュされた UI 要素のアニメーションによる高頻度のキャッシュ無効化

要素のキャッシュされたバージョンが古くなった場合は、キャッシュの無効化が起こります。キャッシュの無効化が起きるのは、アプリの状態が変更されると、画面上の要素の表示方法に影響するためです。そのような変更が発生した場合、UI 要素とその子要素はすべて再描画し、状態の更新を反映させる必要があります。また、アニメーションの実行中にはすべてのフレームで更新が行われることに注意する必要があります。更新が非常に頻繁に行われるので、アニメーションによる更新は、必要な UI 要素のみに制限することが重要です。

"高頻度のキャッシュ無効化" 警告を調べるには

  1. [パフォーマンス警告] の横にある矢印をクリックして、メニューから [フレーム] を選択します。

    タイムラインで選択した期間中にレンダリングされるすべてのフレームの一覧が表示されます。

  2. [CPU 時間] 列ヘッダーをクリックして、値を降順 (最高値から最低値の順) に並べ替えます。

    多くの CPU リソースを使用したフレームが表示されます。これは、キャッシュが頻繁に無効化された可能性が高いことを示します。

  3. CPU 使用率が最も高いフレームを選択します。

  4. CPU 使用率が最も高いフレームを選択した状態で、[フレーム] の横にある矢印をクリックして [キャッシュの更新] を選択します。

    [計測時間]、[配置時間]、または [テクスチャ更新時間] が最も長い UI 要素は、このフレームがレンダリングされたときに更新された要素です。これらの列の値が大きいことはキャッシュの無効化を示しています。

  5. フレーム ビューに戻り、CPU 使用率が最も高いフレームを選択します。

  6. [フレーム] の横にある矢印をクリックしてメニューの [フレーム {x} のビジュアル ツリー] をクリックします。

    すべての UI 要素のリソースの使用状況と共に、フレームのレンダリング時のビジュアル ツリーが表示されます。

  7. [総描画時間 (含む)] 列ヘッダーをクリックして、値を降順に並べ替えます。

    フレームの更新時にレンダリングに最も長い時間を要した UI 要素が一番上に表示されます。ビジュアル ツリー階層内の各 UI 要素とそのすべての子要素のレンダリングに要した時間 (ミリ秒) が表示されます。[キャッシュの更新] レポートで識別した要素のうちどの種類が頻繁な無効化の原因になっているかを特定するには、子要素が描画時間の大きな割合を占めていない要素を見つけます。これは、親要素がレンダリングの遅れの原因となっていることを示しています。

このセクションでは、応答しない UI に関連する一般的なパフォーマンスの問題を識別し解決する方法について説明します。

フレーム描画以外の操作用のユーザー インターフェイス スレッドに対する CPU 使用率が中程度/高い

"フレーム描画以外の操作用のユーザー インターフェイス スレッドに対する CPU 使用率が中程度/高い" というパフォーマンス警告は、UI スレッドのブロック解除または負荷軽減方策を取る必要があることを示します。これにより、UI スレッドでのフレーム描画の処理を向上させることができます。効率のよいコードに書き直すことも役に立ちますが、最善の解決方法は、UI 要素との直接的なやり取りがないすべての操作をそれ自体のスレッドに移動することです。そうすれば、UI と関係のない操作のために UI スレッドにバックログが作成されることがなくなり、UI スレッドだけで、できる限り効率的にユーザー インターフェイスをレンダリングできます。Windows Phone アプリのスレッド処理の詳細については、「Windows Phone 8 用アプリのパフォーマンス上の考慮事項」の「スレッドについて」を参照してください。

メモメモ:

アニメーションに関連するコードによってこのパフォーマンス警告が行われることはありません。これは、アプリケーション分析ツールでアニメーションの実行がフレーム描画操作と見なされるためです。

UI スレッドで CPU 使用率が高くなっている状況を調べるには

  1. 高い CPU 使用率に関する警告を調べるには、[パフォーマンス警告] の横にある矢印をクリックして、メニューから [フレーム]、[関数] の順にクリックします。

    関数ビューが表示されます。関数ビューに、タイムラインの選択部分で呼び出されたすべてのメソッドが示されます。これらはプラットフォーム コードまたはアプリ コード内のメソッドです。

  2. 関数が値の降順 (最大値から最小値へ) に並べ替えられるまで、[サンプル数 (子を含む)] 列ヘッダーをクリックします。

  3. 一覧の上位にあるアプリ コードに含まれるメソッドを探します。

    1 つまたは複数のアプリ メソッドが、サンプリング頻度が最も高い関数の上位に位置していることがあります。これは、そのメソッドを頻繁に呼び出しているか、メソッドが非効率的であるか、または正しく実行されるまでに時間がかかっていることを示す可能性があります。いずれにしても、その結果、アプリの応答の問題につながる UI ブロックが発生します。

  4. メソッドのコードを最適化するか、UI スレッド以外のスレッドにコードを移動します。

コンテンツの再描画のために CPU 使用率が高くなる問題

パフォーマンス グラフに、CPU 使用率が高く、そのためにフレーム レートが低い領域が表示されることがあります。次の図はこの例を示しています。

High CPU usage

次の 2 つの警告は、コンテンツが頻繁に再描画されるためにユーザー インターフェイス (UI) の応答性に問題が発生することを示します。

コンテンツの再描画で CPU 使用率が高いためにフレーム レートが低い

UI 要素が自動的にキャッシュされていないことを示します。これは一般的に、ビジュアル ツリー (UI 要素の階層) が複雑すぎることが原因になっています。解決方法としては、ビジュアル ツリーを単純にするか、アニメーション中にビジュアル ツリーの各要素で実行するコードの量を減らします。

コンテンツの再描画中に CPU の使用率が高い

UI 要素が自動的にキャッシュされていないことを示します。これは一般的に、ビジュアル ツリー (UI 要素の階層) が複雑すぎることが原因になっています。解決方法としては、ビジュアル ツリーを単純にするか、アニメーション中にビジュアル ツリーの各要素で実行するコードの量を減らします。

コンテンツの再描画のために CPU 使用率が高くなっている状況を調べるには

  1. [パフォーマンス警告] の横にある矢印をクリックして、メニューから [フレーム] を選択します。

    タイムラインで選択した期間中にレンダリングされるすべてのフレームの一覧が表示されます。

  2. [CPU 時間 (ミリ秒)] 列ヘッダーをクリックして、値を降順 (最高値から最低値の順) に並べ替えます。

    これにより、レンダリング中に CPU を最も多く使用しているフレームを特定することができます。

  3. CPU 時間が最も高いフレームを選択します。

  4. CPU 使用率が最も高いフレームを選択した状態で、[フレーム] の横にある矢印をクリックして [フレーム {x} のビジュアル ツリー] を選択します。

    すべての UI 要素のリソースの使用状況と共に、フレームのレンダリング時のビジュアル ツリーが表示されます。

  5. [総描画時間 (含む)] 列ヘッダーをクリックして、値を降順に並べ替えます。

    これにより、ビジュアル ツリー階層内の各 UI 要素とそのすべての子要素のレンダリングに要した時間 (ミリ秒) を把握して、フレームの更新時にレンダリングに最も長い時間を要した UI 要素を特定することができます。

  6. 子要素を複数含み描画に長い時間がかかっている要素を探します。このような要素は問題があることを示しており、その要素のビジュアル ツリーを単純にすることを検討する必要があります。

    この要素のビジュアル ツリーを単純にすることは、フレームの再描画時に更新やキャッシュを必要とする要素数が少なくなることを意味します。

  7. 要素を更新、操作、または表示する際に実行されるコードのソリューションを検索し、省略または効率化できる CPU 負荷の高い操作を検索します。これが不可能な場合は、これらの関数の実行を UI スレッドではなく、独自に作成したスレッドに移動してください。

表示:
© 2016 Microsoft