エクスポート (0) 印刷
すべて展開

方法: Windows Phone Performance Analysis を使用して一般的なパフォーマンスの問題を識別および解決する

2012/02/09

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

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

キャッシュされた 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 用アプリケーションのパフォーマンスに関する考慮事項」の「スレッドについて」を参照してください。

注注:

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

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

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

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

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

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

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

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

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

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

次の 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 スレッドではなく、独自に作成したスレッドに移動してください。

表示:
© 2014 Microsoft