Performance Viewer でプロファイリング結果を分析する (非推奨)
パフォーマンスビューアーの廃止
2022.3 がリリースされる前は、サンプリング、トレース、行単位のパフォーマンススナップショットは従来のパフォーマンスビューアーで開く必要がありましたが、タイムラインスナップショットはより最新のタイムラインビューアーで開いていました。これにより、2 つのビューアーのユーザーインターフェースとスナップショット分析へのアプローチが異なるため、全体的なユーザーエクスペリエンスが悪化しました。
dotTrace 2022.3 では、パフォーマンスビューアーを廃止し、dotTrace ビューアー (以前のタイムラインビューアー) を採用しました。dotTrace はこれを使用して、すべてのタイプのスナップショットを開きます。それでも、破棄された dotTrace 2022.3 の Performance Viewer を引き続き使用したい場合は、そのようなオプションがまだあります。
dotTrace Viewer と非推奨の Performance Viewer の主な違いは次のとおりです。
- 分析の開始
Performance Viewer では、スレッドビューまたは呼び出しツリービューを使用して分析を開始します。スレッドビューの主な問題は、メソッド呼び出しをマージできないことです。アプリケーションが同じコード (メソッド) を異なるスレッドで実行するとします。Performance Viewer では、すべてのスレッドを 1 つずつ開く必要があり、それらが同じコードを実行していることに気付かない可能性があります。
dotTrace Viewer では、開始点は呼び出しツリーです。Performance Viewer とは異なり、すべてのスレッドからの結合された呼び出しが表示されます。
dotTrace Viewer のスレッドリストは、分析のために特定のスレッドを選択できるだけでなく、他のフィルターに応じてデータを表示するフィルターです。例: 特定のメソッドにスコープした後、スレッドはメソッド呼び出しが異なるスレッド間でどのように分散されたかを示します。
Performance Viewer の呼び出しツリービューには、スレッドビューと同じ問題があります。データはそのまま表示されます。ビューは、ユーザー呼び出しをマージしたり、システム呼び出しをグループ化したりしません。開始すると、ツリーは常にシステムコールの集まりであり、ユーザーコールは内部に隠されています。
ツリーを調べ始めると、興味のあるユーザーメソッドが見つかります。問題は、これらが個別の呼び出しインスタンスであることです。
dotTrace ビューアーで表示されるものと比較してください。ユーザーメソッドのマージされた呼び出しが一番上に表示され、システムコールはまったくありません。システムコールは、システムコールの折りたたみにより隠されています。
必要に応じて、システムコールを展開して、Performance Viewer と同様の図を取得できます。これにより、コールツリーがそのまま表示されます。システムコールとユーザーコールのインスタンスがその場所に表示されます。
全体として、Performance Viewer を使用する際の主な問題は開始点です。パフォーマンス分析をどこから始めるべきかは明らかではありません。dotTrace Viewer では、いつでも呼び出しツリーから始めて、疑わしいメソッドにスコープを設定できます。高い確率で、ホットスポットの上位 5 つのメソッドが探しているものです。
- データ解析
dotTrace ビューアーは、スナップショット分析への OLAP アプローチを提供します。すべてのビューは、一部のデータを表示するだけでなく、他のビューのフィルターとしても機能します。これらのフィルターを適用することで、スナップショットをさまざまな次元でスライスできます。
Performance Viewer には、ほとんど生のコールスタックデータが表示されます。このアプローチが望ましい場合もありますが、dotTrace ビューアーのフィルターは、さまざまな山括弧からのデータを分析するための信じられないほどの多様性を提供します。
- スレッドの複雑さの分析
Performance Viewer は、各スレッドのツリーの複雑度を自動的に計算し、このパラメーターに基づいてスレッドビューでスレッドを並べ替えます。この並べ替えにより、どのスレッドが最も多くの作業を行っており、分析の対象となるかをすばやく理解できます。
現在、dotTrace Viewer はこのようなスレッド分析を提供していませんが、将来的にはサポートする予定です。
- サブシステム
OLAP アプローチにより、dotTrace ビューアーのサブシステムは、他のフィルターと同様に完全に機能するフィルターです。特定のサブシステムを選択すると、他のビューにフィルター処理されたデータが表示されます。たとえば、呼び出しツリーは、選択したサブシステムに属するメソッドを含むコールスタックの部分のみを表示します。
Performance Viewer では、サブシステムは静的エンティティです。選択したコールツリーのサブシステム間の時間分布のみが表示されます。
- タブと分析状態
Performance Viewer の最も強力な機能の 1 つは、コールツリーの特定の部分を個別のタブで開く機能です。これは、ツリーの疑わしい部分を調べてから、焦点を失うことなく分析に戻りたい場合に役立ちます。
dotTrace ビューアーでは、分析の状態は、現在有効になっているフィルターのセットによって決まります。フィルターを追加または削除すると、状態が変わります。将来の dotTrace バージョンでは、タブを使用して現在の状態を保存する機能を追加します。
パフォーマンスビューアーの概要
アプリケーションの実行が遅すぎる場合は、問題を特定して、実行するアクションを理解するのが難しい場合があります。アプリケーションをプロファイリングしてパフォーマンススナップショットを取得した後の次のステップでは、スナップショットデータを分析しています。
分析はパフォーマンスビューアーで実行されます。パフォーマンスビューアーは、収集されたデータに異なる視点を与える一連のビューです。ビューアーは、パフォーマンススナップショットを収集すると自動的に実行されます。
スナップショット分析はほとんど形式化されたプロセスではないため、この章では段階的なガイダンスはありません。それにもかかわらず、パフォーマンス分析に不可欠なすべての基本操作の概要を説明します。
また、この章には、大量のスナップショットデータを失わないようにするためのヒントが記載されています。
関連ページ:
スレッドツリー
スレッドツリービューには多くの目的があります。典型的な使用例は次のとおりです。アプリケーションによって生成されるスレッドの種類を表示します。すべてのスレッドとそのアクティビティを監視します。各スレッドのアクティビティを分析します。重要な実行パスを見つけて調べます。スレッドツリービューを開くには左パネルの対応するアイコンをクリックします。スレッドツリービューには、アプリケーションのすべてのスレッドが一覧表示されます。実行時間によってソートされます。各スレッドは、その名前または ID によって識別さ...
呼び出しツリー
呼び出しツリービューは、すべてのスレッドのすべての関数呼び出しを表します。各最上位ノードは、特定のスレッドによって実行されたトップレベルの機能を表します。各ノードは関数呼び出しに対応し、プロファイリング中に収集されたメトリクスを含みます。このビューすばやく実際のアプリケーションアクティビティに移動します。プロセスまたは関数の実行パスを調べます。クリティカルパスを見つけて調べます。関数呼び出しごとに、すべてのスレッドの合計実行時間に対する割合を表示します。コールツリービューを開くには左パネルの対応...
呼び出しツリー
呼び出しツリーはメソッド実行パスを示します。ツリー内の各メソッドノードは、特定のスレッドによって実行されるトップレベルのメソッドを表します。メソッドノードには、呼び出されたメソッドとプロファイリング時に収集されたメトリクスがリストされます。呼び出しツリーを使用して: アプリケーションアクティビティの簡単な概要を取得する: 最も「高額な」呼び出しを移動するまたはフレームグラフを使用します。最も遅いメソッド (最も時間がかかるメソッド、または頻繁に呼び出されるメソッド) の実行パスを次の方法で調べます。...
スレッド
スレッドフィルターは、スレッドのアクティビティを表示し、詳細な分析のためにスレッドを選択できるようにします。スレッド名 (存在する場合) またはスレッドの種類。dotTrace は、次のスレッドタイプを区別します。Main – アプリケーションを開始するスレッド。Finalizer – オブジェクトのファイナライズを実行するスレッド。糸 #... – 他のすべてのスレッドタイプ (スレッドプールのマネージドスレッド、ネイティブスレッド、ガベージコレクションスレッドなど)。特定のスレッドで費やされたフィ...
フォールドコール
呼び出しツリーは、無意味な呼び出しのグループを解析の対象にすることで簡素化できます。つまり、システム関数呼び出しと再帰呼び出しのチェーンです。システムコールを折りたたむ:システムコールは、非ユーザーコードの呼び出しです。たとえば、および名前空間からのメソッドの呼び出しです。通常、これらの呼び出しは除外され、呼び出しツリーで灰色のフォントで表示されます。フォールディングを使用して、システムコールのチェーンを非表示にします。折りたたむことができるシステムコールチェーンは、アイコンでマークされていま
サブシステムで分析を簡素化
サブシステムとは、特定のシステムコンポーネント(.NET フレームワークのさまざまな部分、外部ライブラリ、独自のコードなど)で消費される時間を簡単に把握できる、プロファイリングスナップショットデータを表示する方法です。サブシステムは、特定の名前空間またはアセンブリ内で行われたすべての呼び出しをグループ化するだけです。例: 用のサブシステムを作成して、アプリケーション内のすべての呼び出しを要約することができます。これは、あなたのアプリとのやりとりにどれくらいの時間が必要かを示します。はじめに、概念、...