リソース消費量と UI スレッド アクティビティを分析する (XAML)

アプリケーション タイムライン プロファイラーを使用すると、XAML アプリケーションにおけるアプリケーションの相互作用に関連するパフォーマンスの問題を検出および修復できます。 このツールはアプリケーションのリソース消費を詳細に表示できるので、XAML アプリケーションのパフォーマンス改善に役立ちます。 アプリケーションが UI フレームの準備 (レイアウトとレンダリング) やネットワークとディスクの要求の処理を実行することで、およびアプリケーションの起動、ページの読み込み、ウィンドウのサイズ変更などのシナリオにおいて使用した時間を分析することができます。

アプリケーション タイムラインは、[デバッグ]>[パフォーマンス プロファイラー] コマンドから開始できるツールの 1 つです。

このツールは、以前のバージョンの Visual Studio の診断ツールセットに含まれていた [XAML UI の応答性] ツールから置き換わるものです。

このツールは、次のプラットフォームで使用することができます。

  • ユニバーサル Windows アプリ (Windows 10 以降で)
  • Windows 8.1
  • Windows Presentation Foundation (.NET 4.0 以上)
  • Windows 7

Note

アプリケーション タイムライン データと共に、CPU 使用率データ、エネルギー消費量データを収集して分析できます。 「デバッガーを使用して、または使用せずにプロファイリング ツールを実行する」をご覧ください。

アプリケーション タイムライン データの収集

ローカル コンピューター、接続されたデバイス、Visual Studio シミュレーターやエミュレーター、またはリモート デバイスでアプリの応答性をプロファイリングすることができます。 「デバッガーを使用して、または使用せずにプロファイリング ツールを実行する」をご覧ください。

ヒント

可能な場合には、アプリをデバイス上で直接実行します。 シミュレーターまたはリモート デスクトップ接続で計測されたアプリケーションのパフォーマンスは、デバイス上での実際のパフォーマンスと同じではないことがあります。 一方で、Visual Studio リモート ツールを使用してデータを収集しても、パフォーマンス データには影響は及ぼしません。

基本的な手順は次のとおりです。

  1. XAML アプリを開きます。

  2. [デバッグ] > [パフォーマンス プロファイラー] の順にクリックします。 [.diagsession] ウィンドウにプロファイリング ツールの一覧が表示されます。

  3. [アプリケーション タイムライン] を選択してから、ウィンドウの下部にある [開始] をクリックします。

    Application Timeline Tool Selected

    Note

    VsEtwCollector.exe を実行するアクセス許可を求める [ユーザー アカウント制御] ウィンドウが表示されることがあります。 はい をクリックします。

  4. パフォーマンス データを収集するアプリのプロファイリングで関心のあるシナリオを実行します。

  5. プロファイリングを停止するには、.diagsession ウィンドウに切り替えてから、ウィンドウの上部にある [停止] をクリックします。

    Visual Studio は、収集されたデータを分析し、結果を表示します。

    Timeline profiler report

タイムライン プロファイル データの分析

プロファイル データを収集した後、次の手順によってコードの分析を開始することができます。

  1. [UI スレッド使用状況][ビジュアル スループット (FPS)] のグラフの情報を表示し、タイムラインのナビゲーション バーを使用して、分析する時間の範囲を選択します。

  2. [UI スレッド使用状況] または [ビジュアル スループット (FPS)] のグラフの情報を使用して、[タイムラインの詳細] ビューで詳細を確認し、応答性に問題があるように見受けられる場合は、考えられる原因を探します。

シナリオ、カテゴリ、およびイベントのレポート

[アプリケーション タイムライン] ツールは、XAML のパフォーマンスに関連するシナリオ、カテゴリ、およびイベントのタイミング データを表示します。

診断セッションのタイムライン

Performance and Diagnostics timeline

ページの上部にあるルーラーは、プロファイル情報のタイムラインを示します。 このタイムラインは、 [UI スレッド使用状況] グラフと [ビジュアル スループット] グラフの両方に適用されます。 タイムラインのナビゲーション バーをドラッグしてタイムラインのセグメントを選択することにより、レポートのスコープを絞ることができます。

タイムラインには、挿入したすべてのユーザー マークとアプリのアクティブ化ライフサイクル イベントも表示されます。

UI スレッド使用状況グラフ

CPU Utilization Graph

[ UI スレッド使用状況 (%) ] グラフは、コレクション期間中にあるカテゴリで費やされた相対的な時間を横棒グラフで示したものです。

ビジュアル スループット (FPS) グラフ

Visual throughput graph

[ビジュアル スループット (FPS)] の折れ線グラフは、アプリの UI スレッドとコンポジション スレッドの 1 秒あたりのフレーム数 (FPS) を示します。

タイムラインの詳細

レポートの分析はほとんどこの [詳細] ビューで行われます。 CPU を使用する UI フレームワーク サブシステムまたはシステム コンポーネントによって分類されたアプリケーション別に CPU 使用率が表示されます。

次のイベントがサポートされます。

名前 説明
解析中 XAML ファイルの解析とオブジェクトの作成に費やされた時間。

[タイムラインの詳細][解析] ノードを展開すると、ルート イベントの結果として解析されたすべての XAML ファイルの依存関係チェーンが表示されます。 このヒントにより、パフォーマンスが重要なシナリオにおいて不必要なファイル解析やオブジェクト作成を特定し、それらを取り除いて最適化できます。
レイアウト 大規模なアプリケーションでは、多数の要素が画面に同時に表示される可能性があります。 場合によっては、この表示によって UI のフレーム レートが低下し、これに対応してアプリケーションの応答性も低下します。 レイアウト イベントでは、各要素 (つまり、Arrange、Measure、ApplyTemplate、ArrangeOverride、MeasureOverride に費やした時間) をレイアウトするコストが正確に判断されます。 レイアウト パスの一部を成すビジュアル ツリーも作成されます。 この視覚表現を使用すると、簡略化する論理ツリーを判断したり、レイアウト パスを最適化するために他の遅延メカニズムを評価したりできます。
Render XAML 要素を画面に描画するために費やされた時間。
入出力 ローカル ディスクから、または Microsoft Windows Internet (WinINet)API を使用してアクセスするネットワーク リソースから、データを取得するために費やされた時間。
アプリケーション コード 解析やレイアウトに関連しないアプリケーション (ユーザー) コードを実行するために費やされた時間。
Xaml その他 XAML ランタイム コードの実行に費やされた時間。

ヒント

UI スレッドで実行されるアプリ メソッドを表示するためにプロファイリングを開始する場合は、 [CPU 使用率] ツールと共に [アプリケーション タイムライン] ツールを選択します。 実行時間の長いアプリ コードをバック グラウンド スレッドに移動すると、UI の応答性が向上します。

タイムラインの詳細のカスタマイズ

[ タイムラインの詳細 ] ツールバーを使用して、[ タイムラインの詳細 ] ビュー エントリの並べ替え、フィルター操作、注釈の指定を行います。

名前 説明
並べ替え 開始時刻またはイベントの長さによって並べ替えます。
Group events by frame フレームごとにイベントをグループ化する最上位の [ フレーム ] カテゴリを追加または削除します。
Filter timeline details list 選択したカテゴリまたはイベントの長さに基づいて、一覧をフィルター処理します。
Customize timeline details information イベントに注釈を指定できます。