WPF のパフォーマンス プロファイリング ツール

更新 : 2007 年 11 月

WPF は、アプリケーションの実行時の動作を分析したり、適用可能なパフォーマンス最適化の種類を決定できるパフォーマンス プロファイリング ツール スイートを提供します。Windows SDK ツール (WPFPerf) に含まれる 5 つのパフォーマンス プロファイリング ツールを次の表に示します。

ツール

説明

Perforator

レンダリング動作の分析に使用します。

ビジュアル プロファイラ

ビジュアル ツリーの要素による WPF サービス (レイアウトやイベント処理など) の使用状況に関するプロファイリングで使用します。

作業セット アナライザ

アプリケーションの作業セット特性を分析するために使用します。

イベント トレース

イベントの分析とイベント ログ ファイルの生成に使用します。

ETW トレース ビューア

WPF ユーザー インターフェイス形式で Event Tracing for Windows (ETW) ログ ファイルを記録、表示、および参照します。

このトピックには次のセクションが含まれています。

  • パフォーマンス プロファイリング ツールの使用
  • Perforator
  • ビジュアル プロファイラ
  • 作業セット アナライザ
  • イベント トレース
  • ETW トレース ビューア
  • その他のパフォーマンス ツールのリソース
  • 関連トピック

パフォーマンス プロファイリング ツールの使用

Windows SDK をインストールすると、WPF Performance Suite をインストールできるようになります。

Aa969767.alert_note(ja-jp,VS.90).gifメモ :

Performance Suite をインストールする前に、古いバージョンの WPFPerf.exe を削除します。

WPFPerf を初めて実行すると、[Add Tool] ダイアログ ボックスが表示されます。

[Add Tool] ダイアログ ボックス
[ツールの追加] ダイアログ ボックス

使用するツール (複数可) を選択して、[OK] をクリックします。

Aa969767.alert_note(ja-jp,VS.90).gifメモ :

パフォーマンス プロファイリング ツールを使用するには、管理者アクセス権を持つユーザー アカウントで実行する必要があります。

Perforator

Perforator は、レンダリング動作を分析するためのパフォーマンス プロファイリング ツールです。Perforator のメイン ウィンドウには、アプリケーションの各部分の特定のレンダリング動作を分析できるオプションのセットが表示されます。

Perforator のメイン ウィンドウ
パーフォレイター メイン ウィンドウ

Perforator を使用すると、アプリケーションのリアルタイムのレンダリング動作に影響する、複数のオプションを設定できます。

オプション

説明

Draw software rendering with purple tint

ソフトウェア レンダリング パイプラインを使用してレンダリングされるすべての領域を、紫色で描画します。これには、ソフトウェア レンダリング ターゲット、ソフトウェア 3D コンテンツ、およびプリミティブごとのソフトウェア フォールバックが含まれます。

Clear back-buffer before updating

各描画操作前に、アプリケーション ウィンドウをクリアします。

Show dirty region update overlay

WPF で画面が更新されるたびに、色の変更で示されるようにします。これにより、アプリケーションでいつどの領域が再描画されるのかがわかります。

Disable dirty region support

変更が行われるたびに、WPF によってウィンドウ全体が再描画されるようにします。通常は、ウィンドウ内の変更された部分のみが再描画されます。このオプションを有効にすると、アプリケーションのレンダリングがはるかに遅くなります。

Disable Opacity effects

パフォーマンスに大きな負荷をかける可能性がある、一部の不透明度の使用を無効にします。

Disable per-primitive software fallback

個々のレンダリング プリミティブに対して、ソフトウェア フォールバックを無効にします。ソフトウェア中間レンダリング ターゲットおよびその他のソフトウェア レンダリングは、無効にできません。

Disable high-quality image rescaling

大きいイメージの小さいサイズへの再スケーリングを無効にします。

Disable 3D rendering

すべての 3D レンダリング操作を無効にします。

Enable Debug Control オプション

[Enable Debug Control] チェック ボックスを使用すると、WPF 共有メモリへのアクセスを有効または無効にできます。既定では、Perforator が起動時にこのオプションを有効にし、終了時に無効にします。Perforator が異常終了した場合は、再起動してから [Enable Debug Control] チェック ボックスを手動でオフにし、WPF 共有メモリへのアクセスを無効にします。その後、Perforator と、プロファイリングしていた WPF アプリケーションを再起動します。

Aa969767.alert_note(ja-jp,VS.90).gifメモ :

WPF アプリケーションの実行時にこのオプションを有効にすると、メモリ使用量がやや増加し、パフォーマンスがやや低下します。Perforator がこのオプションを正しく無効にすることを確認する必要があります。

レジストリ キー設定

[Enable Debug Control] チェック ボックスは、WPF のレジストリ キー設定を追加または削除します。このレジストリ キー設定を手動で追加するには、コマンド ウィンドウから次のコマンドを実行します。

reg add HKLM\SOFTWARE\Microsoft\Avalon.Graphics /v EnableDebugControl /t REG_DWORD /d 1 /f

このレジストリ キー設定を手動で削除するには、コマンド ウィンドウから次のコマンドを実行します。

reg delete HKLM\SOFTWARE\Microsoft\Avalon.Graphics /v EnableDebugControl /f

Perforator の使用

Perforator を使用するには、レンダリング動作を分析する WPF アプリケーションを起動します。アプリケーションが起動されたら、Perforator の [Refresh] ボタンをクリックします。Perforator の WPF アプリケーションのリスト ボックスに、そのアプリケーションが表示されます。分析するアプリケーションとレンダリング オプションを選択します。フレーム レートなどの Perforator データ値は、アプリケーションのレンダリング動作を直ちに反映します。

アプリケーションとレンダリング オプションが選択された Perforator
オプションが選択されたパーフォレイター メイン ウィンドウ

次のスクリーンショットに表示された PhotoDemo サンプル アプリケーションでは、"Draw software rendering with purple tint" と "Show dirty region support" のレンダリング オプションが有効にされています。

レンダリング動作を表示する PhotoDemo サンプル アプリケーション
パーフォレイター レンディング オプションを表示する Photodemo アプリケーション

以下のセクションでは、レンダリングに関連する主要なパフォーマンスの問題と、その診断に Perforator のオプションとデータ出力を役立てる方法について説明します。

ソフトウェア レンダリングの回避

WPF のハードウェア レンダリング パイプラインはソフトウェア レンダリング パイプラインよりもかなり高速であるため、ソフトウェアでレンダリングされるアプリケーション UI が少ないほど、アプリケーションでのレンダリングが速くなります。通常、ソフトウェアで 1 つの領域のレンダリングにかかる時間は、レンダリングされるピクセル数に比例します。このため、ソフトウェア パイプラインを使用した広い領域のレンダリングは慎重に行ってください。小さい領域であればそれほど問題がありません。

ソフトウェア レンダリングの問題の検出に役立つ Perforator オプションは、次のとおりです。

  • Draw software rendering with purple tint: ソフトウェア レンダリング パイプラインを使用してレンダリングされるすべての領域を、紫色で描画します。これには、ソフトウェア レンダリング ターゲット、ソフトウェア 3D コンテンツ、およびプリミティブごとのソフトウェア フォールバックが含まれます。

  • Num Software Render Targets: ソフトウェアのみで実行中のフルウィンドウのレンダリング ターゲットをカウントします。カウントが 0 以外の場合は、重大なパフォーマンス上の問題を意味します。通常これは、マシン構成か、レイアード ウィンドウの存在に関連する問題です。Microsoft Direct3D を有効にし (dxdiag を実行)、すべてのモニタを 32 ピクセルあたりのビット数 (BPP) ビット深度に設定し、またグラフィックス カードが Microsoft DirectX 9.0 によってサポートされるようにしてください。

  • Num Hardware Render Targets: ハードウェアで実行中のフルウィンドウのレンダリング ターゲットをカウントします。この数字は、アプリケーション ウィンドウの数とディスプレイ アダプタの数を掛け合わせた数字と同等です。これは、可能な限りアプリケーションがハードウェアによって加速されていることを意味します。

多数の中間レンダリング ターゲットの回避

中間レンダリング ターゲットとは、コンテンツを画面に描画できるようにするために WPF で描画する必要がある追加イメージです。

  • Maximum SW/HW IRTs per Frame: アプリケーションの任意の 1 フレームの描画に適用される、ソフトウェアまたはハードウェアの中間レンダリング ターゲットの最大数を表します。通常、Visual 上で DrawingBrushVisualBrushOpacity を使用するか、TileBrush 上でタイル モードを使用すると、中間レンダリング ターゲットが発生します。この数が非常に大きい場合、WPF ランタイムがアプリケーションをレンダリングするために大量の作業を実行している可能性があります。

便利なパフォーマンス メトリックス

  • Dirty Rect Addition rate: アプリケーションで高速更新がトリガされていることを表します。

  • Frame rate: アプリケーションが画面に描画される速度を報告します。アニメーションが含まれないアプリケーションの場合、ダーティ領域最適化によって必要時以外の描画が回避されるため、この値は 0 に近くなります。この数字は推定値として扱います。

  • **Estimated video memory usage:**WPF (テクスチャおよびレンダリング ターゲット) によって直接行われる、大量のビデオ メモリの割り当てを追跡します。レンダリング時の指定したビデオ ドライバによる割り当て、ピクセル シェーダまたは頂点シェーダのコンパイルと読み込みによって発生する割り当て、および頂点バッファまたはインデックス バッファに対する割り当ては追跡しません。一般に、テクスチャ メモリの使用可能容量を超過すると、WPF レンダリング ロジックによりソフトウェアが使用されます。また、複数ディスプレイ (マルチモニタ) は、アプリケーションに必要なビデオ メモリ容量を増大させます。

ダーティ領域サポート

Windows Presentation Foundation (WPF) はウィンドウの必要な部分だけを更新するため、ウィンドウの更新される部分を常に視覚化すると便利です。更新動作の視覚化に役立つオプションは、次のとおりです。

  • **Show dirty-region update overlay:**WPF で画面が更新されるたびに、色の変更で示されるようにします。これにより、実行中のアプリケーションでどの領域がいつ再描画されるのかがわかります。

  • Clear Back Buffer Before Rendering: 各描画操作前にウィンドウがクリアされるようにします。

  • Disable Dirty Region Support: 変更が行われるたびに、WPF によって、変更された部分のみではなくウィンドウ全体が再描画されるようにします。ウィンドウ全体を強制的に更新するために役立つ場合がありますが、これを有効にするとアプリケーションのレンダリングがはるかに遅くなることに注意してください。

レンダリング機能の無効化

Perforator を使用すると、パフォーマンスに大きな負荷をかける特定の操作を無効にして、その操作がアプリケーションのボトルネックとなっているかどうかを確認できます。

  • Disable Opacity Effects: パフォーマンスに大きな負荷をかける可能性がある、一部の不透明度の使用を無効にします。一般にこのパフォーマンス上の問題を回避するには、Button などの高レベルのオブジェクトではなく、Brush などの低レベルのオブジェクトに不透明度を設定するようにします。

  • Disable per-primitive software fallback: 個々のレンダリング プリミティブに対して、ソフトウェア フォールバックを無効にします。ソフトウェア中間レンダリング ターゲットおよびその他のソフトウェア レンダリングは、無効にできません。

  • **Disable high-quality image rescaling:**WPF は、大きいイメージが小さいサイズで表示されている場合に、再スケーリングして見栄えを良くします。アプリケーションに多数の大きいイメージがあり、画面上で縮小表示されている場合には特に、この操作がパフォーマンスに大きな影響を与えます。このオプションを使用すると、この再スケーリングを無効にして、パフォーマンス上の問題の原因となっているかどうかを確認できます。これを回避するには、イメージを、表示サイズに近いサイズにデコードすることを検討します。

  • Disable 3D rendering: すべての 3D 描画操作を無効にします。

ビジュアル プロファイラ

ビジュアル プロファイラは、ビジュアル ツリー内の要素による WPF サービス (レイアウト、イベント処理など) の使用状況をプロファイリングするための、パフォーマンス ツールです。このツールのプロファイリング出力を分析することで、パフォーマンスのボトルネックとなる可能性があるアプリケーションのビジュアル要素を特定できます。ビジュアル プロファイラのメイン ウィンドウには、アプリケーションのプロファイリング方法を指定するために使用するオプションのセットが表示されます。

  • Update interval。プロファイリング中に使用する時間の単位。

  • Display overlay。Display overlay オプションを使用すると、CPU リソースの使用率を表示できます。オーバーレイの赤色が濃いほど、CPU リソースの使用率が高いことを示します。

ビジュアル プロファイリングの値

WPF ビジュアル プロファイラは、アプリケーションのビジュアル シーンを構築する基本的なビルド ブロックのコンテキストにおける、パフォーマンスの問題を表示します。こうしたビルド ブロックには、Button コントロールや TextBlock コントロールなどの高レベルのオブジェクトに加えて、Line 要素や Ellipse 要素などの低レベルのオブジェクトも含まれます。ビジュアル プロファイラは、パフォーマンスの問題を、関数名の呼び出しグラフではなくビジュアル オブジェクトの表現で表します。これは、Windows SDK ツールの UI Spy による情報の表現方法に似ています。詳細については、「UI Spy (UISpy.exe)」を参照してください。

WPF のパフォーマンスの問題全体を分析するためには、基になる WPF サービスのロールとスコープを理解する必要があります。これらのサービスには、レイアウト、レンダリング、およびアニメーションが含まれます。ビジュアル プロファイラは、WPF サービスがアプリケーション オブジェクト間にどのように割り当てられているかをグラフィックス表示します。たとえば、ビジュアル プロファイラでアプリケーション オブジェクトのビジュアル ツリーを表示すると、オブジェクトが使用しているリソースの相対的な量を表すため、さまざまな濃さの赤色の網掛けがオブジェクトにオーバーレイされます。濃い赤色がオーバーレイされて表示されるオブジェクトは、薄い赤色がオーバーレイされたオブジェクトよりも高い割合でリソースを使用していることを意味します。さらに重要な点として、ビジュアル プロファイラは、1 つのオブジェクトが消費する特定の WPF リソース容量の詳細も提供します。

ビジュアル プロファイラの使用

ビジュアル プロファイラを使用するには、[Start Profiling] ボタンをクリックし、[Launch] または [Attach] を選択します。[Attach] オプションを使用するには、WPFPerf とプロファイリング対象アプリケーションがどちらも管理者アクセス権を使用して実行されている必要があります。また、オーバーレイ機能は無効になり、[Attach] オプションで使用できるイベント数は少なくなります。[Launch] オプションを使用することをお勧めします。

[Events] タブでは、プロファイリングするアプリケーション イベントと要素イベントを選択します。

ビジュアル プロファイラ構成を設定して、プロファイリングを有効または無効にできるアプリケーション イベントは、次のとおりです。これらのイベントのうちメソッドであるものは、メソッド名、かっこで囲まれたクラス名の順に表記します。たとえば、Tick (TimeManager) は TimeManager.Tick メソッドを表します。

アプリケーション イベント

説明

RenderMessageHandler (MediaContext)

描画パスを示します。TimeManager.Tick や MediaContext.Render などのメソッドを呼び出します。

レンダリング スレッド

レンダリング スレッドでレンダリング命令を実行するときに発生します。これは、レンダリングにバインドされたアプリケーションの検出に便利です。

Layout

測定パス、配置パス、および描画パス中に発生します。

UpdateRealizations

テキスト効果やビットマップ効果の内部ビットマップ表現を更新するときに発生します。

Tick (TimeManager)

アニメーションがタイマを刻むときに発生します。このイベントは、アニメーション描画ハンドラをトリガする可能性があります。

UpdateEffectiveValue (DependencyObject)

プロパティ エンジンが DependencyProperty の値を変更するときに発生します。

ヒット テスト

ヒット テスト パス中に発生し、どのビジュアル オブジェクトがヒットしたかを確認します。

AnimatedRenderMessageHandler (MediaContext)

アニメーションを有効にすると、このハンドラがアニメーションを処理および更新します。それによりプロパティが変更され、レンダリングが行われます。

Render (MediaContext)

描画パス中に発生します。このメソッドは、最終的に各要素の OnRender メソッドを呼び出します。全要素に関する OnRender のコストの合計を理解するために便利です。このイベントは、Visual Studio Profiler (VSP) ファイルの MediaContext.Render メソッドに対応しています。

FormatLineInternal (TextFormatterImp)

テキストの書式設定時に発生します。

MarkVisibleRealizations (Visual)

テキストの内部ビットマップ表現を検出したときとビットマップ効果を更新する必要があるときに発生します。

ビジュアル プロファイラ構成を設定して、プロファイリングを有効または無効にできる要素イベントは、次のとおりです。

要素イベント

説明

Layout

測定パス、配置パス、および描画パス中に発生します。

MarkVisibleRealizations (Visual)

テキストの内部ビットマップ表現を検出したときとビットマップ効果を更新する必要があるときに発生します。

UIElement.OnRender

UIElement レンダリング操作です。

UIElement Layout

UIElement レイアウト操作です。

アプリケーションとプロファイリング オプションの選択が完了したら、[OK] ボタンをクリックして、アプリケーションのプロファイリングを開始します。

アプリケーションとビジュアル プロファイラ ツールを並行して実行し、ツール内の値が変化することを確認します。ビジュアル ツリー階層を展開すると、プロファイリングする特定のビジュアル オブジェクト (グリッド コントロールなど) を選択できます。ビジュアル プロファイラの [CPU Usage] セクションに、オブジェクトとアプリケーションの両方による WPF サービスの使用率の詳細が示されています。要素の [CPU Utilization] データには次の項目が表示されます。

  • Inclusive Time 要素およびその子孫すべてによる CPU 使用率。

  • Exclusive Time 要素のみによる CPU 使用率。

ビジュアル プロファイラ表示出力
Visual Profiler 表示出力

ビジュアル プロファイラは、オブジェクトが使用しているリソースの相対的な量を表すため、さまざまな濃さの赤色の網掛けを、ビジュアル ツリー内のオブジェクトにオーバーレイします。濃い赤色がオーバーレイされて表示されるオブジェクトは、薄い赤色がオーバーレイされたオブジェクトよりも高い割合でリソースを使用していることを意味します。

作業セット アナライザ

作業セット アナライザは、特定のプロセスのメモリ使用量に関する情報を提供する WPF のパフォーマンス分析ツールです。このツールを使用すると、特定のアプリケーション状態におけるアプリケーションのメモリ使用量に関する情報のスナップショットを生成できます。

アプリケーションの作業セット

アプリケーションの作業セットとは、その仮想アドレス空間内にある、最近参照されたページのコレクションです。これには、共有データとプライベート データの両方が含まれます。共有データには、アプリケーションで実行するすべての命令 (独自の DLL およびシステム DLL 内の命令を含む) が格納されたページが含まれます。ワーキング セットのサイズが増加すると、メモリ要求が増加します。ワーキング セットの詳細については、「Process Working Set」を参照してください。

仮想アドレス ダンプ (VaDump) ユーティリティ

仮想アドレス ダンプ (VaDump) は、指定したプロセスのメモリ使用量に関する情報を含む一覧を作成します。このツールは次のディレクトリにあります。

~\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\winnt

Aa969767.alert_caution(ja-jp,VS.90).gif重要 :

VaDump のディレクトリの場所を、システムの実行パスに含める必要があります。そうしないと、作業セット アナライザが正常に機能しません。

作業セット アナライザの使用

作業セット アナライザを使用するには、プロファイリングする WPF アプリケーションを起動します。作業セット アナライザを起動したら、[Select Process] でオプションを選択します。

作業セット アナライザの [Select Process] ダイアログ ボックス
ワーキング セット ビューア メイン ウィンドウ

作業セットを分析するプロセスを選択し、[Capture] ボタンをクリックします。作業セット アナライザは、まず VaDump を呼び出して、メモリ使用量に関する情報を生成します。次に、この情報を解析して、グラフィックスを駆使した形式で表示します。

Aa969767.alert_note(ja-jp,VS.90).gifメモ :

作業セット データは、メモリ使用量の静的ビューを提供します。アプリケーションのさまざまな時点における作業セット データを複数生成すると、メモリ使用量の差を比較することができます。

作業セット データを表示する準備ができると、作業セット アナライザは、動的データ、システム データ、およびアプリケーション モジュールを表すツリー ビューを生成します。

作業セット アナライザのメモリ使用量カテゴリ
ワーキング セット ビューア使用カテゴリ

WPF アプリケーションの場合、[WPF Modules] カテゴリに、WPF のシステム固有モジュールが含まれています。表示するカテゴリをクリックすると、一連の円グラフが表示されます。たとえば、[WPF Modules] カテゴリをクリックすると、ウィンドウの左側に次の情報が表示されます。

作業セット アナライザによる WPF Modules のメモリ使用量の円グラフ
ワーキング セット ビューア メモリ使用状況の円グラフ

上部のキャプションには、この作業セット カテゴリの合計サイズが表示されます。この場合、WPF Modules は 9160 KB のメモリを使用しています。この円グラフは、WPF Modules カテゴリを構成するすべてのモジュールによる、個別のメモリ使用量を表しています。

Aa969767.alert_note(ja-jp,VS.90).gifメモ :

メモリ使用量の各カテゴリのサイズは、作業セット情報がキャプチャされた時点でのアプリケーションのメモリ使用量を反映しています。

小さい表は、共有バイト、共有可能バイト、およびプライベート バイトによるメモリ使用量を表しています。

作業セット アナライザによるメモリ使用量の表
ワーキング セット ビューア メモリ使用状況の円グラフ

共有バイト カテゴリは、他の WPF アプリケーションで共有可能なメモリ容量を表します。

アプリケーション メモリ使用量の表示

アプリケーションのメモリ使用量を表示するには、[Working Set] ツリー ビューの [Other Modules] カテゴリから、実行可能ファイルの名前を選択します。

作業セット アナライザのメモリ使用量カテゴリ
ワーキング セット ビューア使用カテゴリ

作業セット アナライザ ファイルの保存と再読み込み

現在の作業セットの使用量情報を保存するには、作業セット アナライザのメイン メニューの [File] をクリックします。次に、[Save VADump output] ボタンをクリックします。作業セットの使用量情報を保存したら、[Capture] ボタンをクリックすることにより、別のメモリ使用量スナップショットを生成できます。VADump コンテンツが含まれているファイルを再読み込みするには、作業セット アナライザのメイン メニューの [File] をクリックします。次に、[Open VADump output] ボタンをクリックします。

タイマ遅延を使用した作業セット情報のキャプチャ

作業セット アナライザによって提供される時間遅延機能を使用すると、指定した時間間隔の後に、作業セットの使用量情報をキャプチャできます。作業セット アナライザのメイン メニューの [Actions] をクリックします。次に、[Launch Process] ボタンをクリックします。

必要に応じて [Browse] ボタンを使用し、実行するアプリケーションを指定します。次に、アプリケーションのすべての引数を入力します。最後に、メモリ使用量情報のキャプチャを遅延する秒数を入力します。そして、[Launch] ボタンをクリックします。作業セット アナライザ下部のステータス テキストで、キャプチャまでの残りの秒数がカウント ダウンされます。この間にアプリケーションの状態を変更できます。キャプチャが完了すると、ステータス テキストに "Done" と表示されます。

イベント トレース

Event Tracing for Windows (ETW) は、効率的なカーネル レベルのトレース機能であり、カーネルまたはアプリケーションで定義されたイベントをログ ファイルに記録できます。イベントは、リアルタイムでもログ ファイルからでも使用でき、アプリケーションのデバッグや、アプリケーション内でパフォーマンスの問題が発生している場所の特定に役立てることができます。WPF イベント トレース プロファイリング ツールは、イベント ログに ETW を使用します。ETW の詳細については、「イベントのトレース」を参照してください。

イベント トレースは、WPF のパフォーマンス プロファイリング ツール スイートである WPFPerf (WpfPerf.exe) の一部です。詳細については、「パフォーマンス プロファイリング ツールの使用」を参照してください。

イベント トレースの使用

イベント トレースのメイン ウィンドウには、イベント ログ情報を追加、保存、および表示するためのオプションのセットが表示されます。

イベント トレースのメイン ウィンドウ
イベント トレース メイン ウィンドウ

新しいイベント ロガーの追加

新しいイベント ロガーを追加するには、イベント トレースのメイン ウィンドウで [Add] ボタンをクリックします。[Add New Logger] ダイアログ ボックスに、定義する情報のセットが表示されます。[Logger Name] は、ロガーのユーザー フレンドリ名です。[GUID] というラベルの付いたドロップダウン リスト ボックスから、次の 4 種類のイベント ロガーのいずれかを選択します。

  • NT Kernel Logger

  • Common Language Runtime Garbage Collection

  • Windows Presentation Foundation - Performance Only

  • Windows Presentation Foundation -All

WPF イベント ロガーには 2 種類あります。"Performance Only" バージョンは、"All" バージョンの簡略化されたサブセットです。[Log File] では、イベント ログ ファイルのファイル名を定義できます。ファイル名を定義するには、[…] というラベルの付いたボタンをクリックします。イベント ログ ファイルは、既定のファイル拡張子 "etl" を使用します。

[Level] オプションは、次に示す使用可能な重大度レベルを表します。上位の番号には、下位のレベルも含まれます。たとえば 3 を指定した場合、警告、エラー、および致命的なイベントのすべてを受け取ります。

Level

説明

1

異常終了または終了イベント。

2

重大なエラー イベント。

3

割り当て失敗などの警告イベント。

4

開始イベントや終了イベントなど、エラー以外のイベント。

5

詳細なトレース イベント。

[Flags] オプションでは WPF イベントのクラスを指定します。ほとんどの場合、既定値で十分です。

新しいイベント ログ情報の作成が完了したら、[Add New Logger] ダイアログ ボックスの [Add] ボタンをクリックして、ロガーをイベント トレースに追加します。追加のイベント ロガーを作成して、イベント トレースに追加できます。すべてのイベント ロガーの追加が完了したら、[Done] ボタンをクリックします。

[Add New Logger] ダイアログ ボックス
[Add New Logger] ダイアログ ボックス

特定のイベント ロガーを削除するには、リスト ボックスでイベント ロガーを選択し、[Remove] ボタンをクリックします。すべてのイベント ロガーを削除するには、[Clear] ボタンをクリックします。

イベント ログの有効化

イベント トレースのメイン ウィンドウで、イベント ロガーのリストから、そのイベント ロガーを選択します。[Start] ボタンをクリックして、ログ記録を有効にします。イベント ロガーのステータスに "Enabled" と表示されます。

イベント ロガーが選択された、イベント トレースのメイン ウィンドウ
イベント ロガーを含むイベント トレース メイン ウィンドウ

アプリケーションのイベントのログ記録が完了したら、[Stop] ボタンをクリックします。イベント ログ情報がキャプチャされたことを確認するため、イベント ログ ファイルを表示できます。イベント ログ ファイルを表示するには、[Open Log] ボタンをクリックします。

イベント ログ情報が表示された、イベント トレースのメイン ウィンドウ
イベント ログ情報を含むイベント トレース メイン ウィンドウ

イベント ログ ファイルには、イベントごとに 5 列の情報が出力されます。

説明

Time

現在の時刻 (CPU チック単位)。

Guid

イベントに対応する GUID。

Name

イベント名。

[イベントの種類]

Info (情報)、Start (開始)、End (終了) のいずれかのイベント。開始イベントには、対応する終了イベントがあります。

Data

特定のイベントの種類に関連するデータ。

イベント ログ情報は、この形式ではあまり有用ではありません。イベント トレースで作成されたイベント ログ ファイルの出力を分析するには、WPFETW トレース ビューア プロファイリング ツールを使用します。

ETW トレース ビューア

Event Tracing for Windows (ETW) は、ユーザー モードのアプリケーションで発生するイベントをトレースしてログに記録するメカニズムを提供します。ETW は、Windows オペレーティング システムに実装され、高速で信頼性の高い汎用的なイベント トレース機能セットを開発者に提供します。イベント トレース ツールを使用すると、WPF 機能に固有のユーザー インターフェイス形式で、ETW ログ ファイルを記録、表示、および参照できます。

ETW トレース ビューアのメイン ウィンドウ
トレース ビュー メイン ウィンドウ

ETW トレース ビューアの使用

WPFイベント トレース プロファイリング ツールを使用して作成および保存した ETW ログ ファイルを表示できます。イベント ログ ファイルは、既定のファイル拡張子 "etl" を使用します。ETW トレース ビューアのメイン メニューの [File] をクリックします。次に、[Open] をクリックして目的のログ ファイルを読み込みます。

ログ ファイルが表示された、ETW トレース ビューアのメイン ウィンドウ
イベント ログを含むトレース ビュー メイン ウィンドウ

ログ ファイルが読み込まれると、ETW トレース ビューアに、イベント ログ キャプチャ期間を表すタイムラインが表示されます。タイムラインの測定単位は、秒またはミリ秒に変更できます。特定のイベントの種類を有効または無効にすることにより、表示するイベントの種類を選択できます。少数のイベントの種類を表示する場合は、[Disable All] ボタンをクリックしてすべてのイベントを無効にしてから、有効にするイベントのチェック ボックスをオンにします。タイムラインに対して有効にされたイベントの種類は、ETW トレース ビューアの右下に表示されます。

タイムライン上をマウスでクリックしドラッグすると、タイムラインの選択領域で発生したイベントだけを表示できます。タイムラインの選択領域を拡大表示するには、右クリックして、次のスクリーンショットに示されているポップアップ メニューを表示します。

ポップアップ メニューが表示された、ETW トレース ビューアのメイン ウィンドウ
イベント ログを含むトレース ビュー メイン ウィンドウ

ポップアップ メニューでは、タイムラインの拡大表示と縮小表示、すべてのイベントの表示、および現在の選択領域のクリアが可能です。タイムラインを拡大表示すると、青色表示の時間間隔が、拡大表示されたタイムラインの長さを表します。その下の黒色表示の時間間隔は、イベント ログ キャプチャ期間全体を基準にした時間を表します。

データが拡大表示された、ETW トレース ビューアのメイン ウィンドウ
イベント ログを含むトレース ビュー メイン ウィンドウ

タイムライン上の小さいボックスをクリックすると、特定のイベントに関する情報を表示できます。

イベント ログ ファイルの生成

ETW トレース ビューアを使用して、ETW ログ ファイルを作成することもできます。そのためには、[Start capture] ボタンをクリックしてイベントのログ記録を開始し、[Stop capture] ボタンをクリックしてイベントのログ記録を終了します。このメソッドを使用して生成されるイベント ロガーでは、イベントのフィルタ処理の設定をカスタマイズできません。カスタム イベント ロガーを作成する場合は、イベント トレース ツールを使用します。

その他のパフォーマンス ツールのリソース

Windows Presentation Foundation (WPF) はデバッグ トレースもサポートします。

WPF のデバッグ トレース サポート

PresentationTraceSources クラスは、Windows Presentation Foundation (WPF) アプリケーションを対象とするデバッグ トレースをサポートします。トレースは、アプリケーションの進行状況を追跡できる診断システムです。トレース ステートメントでは、よく WriteLine メソッドが使用されるのと同じような方法で情報が報告されます。ただし、トレース ステートメントでは、構成ファイルを使用してオン/オフを切り替えることができます。また、出力をカスタマイズすることもできます。

.NET Framework のその他の関連する診断クラスについては、System.Diagnostics を参照してください。

参照

概念

WPF アプリケーションのパフォーマンスの最適化

グラフィックスの描画層

Windows Presentation Foundation のグラフィックス レンダリングの概要

UI Spy (UISpy.exe)