サブシステム
サブシステムフィルターを使用すると、特定のコールツリーの時間が、ユーザーとシステムコード、WPF、LINQ、コレクション、文字列などのさまざまなコンポーネントにどのくらい分散しているかをすばやく評価できます。
サブシステムの仕組み
いくつかの例外 (下記の特別サブシステムを参照) を除いて、各サブシステムは、特定の名前空間またはアセンブリ内で行われた呼び出しを単純にグループ化します。
例: WindowsBase
、PresentationCore
、PresentationFramework
アセンブリで宣言されたメソッドのすべての呼び出しは、WPF サブシステムにグループ化されます。サブシステムフィルターの WPF の横に表示される時間は、選択されたすべてのスレッドに対するこれらすべての呼び出しの合計時間です。
サブシステム名。
特定のサブシステムで費やされた合計時間が、選択されたすべてのスレッドについて要約されています。
サブシステムで費やされた時間の、選択された合計時間に対する割合。
サブシステム別にフィルターを適用するには
サブシステムで目的のサブシステムを選択します。
サブシステムを選択すると、選択したサブシステムが動作した時間間隔のデータのみが他のフィルターに表示されます。
特別なサブシステム
一部のサブシステムは、特定のアセンブリや名前空間からの呼び出しをグループ化するのではなく、他のデータに基づいて計算されます。タイムラインスナップショットでは、より広範なサブシステムのリストが提供されることに注意してください。
特別なサブシステムのリスト:
システムコード : 選択したアクティブプロファイルのルールに一致せず、標準システムライブラリに属するすべてのソースコード。
ユーザーコード : 選択したアクティブプロファイルのルールに一致せず、標準のシステムライブラリに属していないすべてのソースコード。
GC 待機 : スレッドが他のスレッドのブロッキングガベージコレクションの完了を待機するすべての時間間隔。GC 待機時間は、ガーベッジコレクションイベントと比較して多少異なる方法で計算されることに注意してください。
JIT : JIT コンパイルに関連するすべての活動。ETW イベントデータに基づいて計算されます (タイムラインスナップショットのみ)。
SQL クエリ : SQL サーバーとの通信に関連するすべてのアクティビティ。ETW イベントデータに基づいて計算されます (タイムラインスナップショットのみ)。
ファイル I/O : ファイル操作に関連するすべてのアクティビティ。このサブシステムは、ファイル I/O ETW イベントだけでなく、
System.IO
およびその他の名前空間からのグループ化呼び出しに基づいて計算されることに注意してください。そのため、ファイル I/O サブシステムの時間は、ファイル操作イベントの時間と若干異なる場合があります。CPU を待っている : スレッドが次に利用可能な CPU コアで実行する準備ができていることを示します。通常、これらは、CPU コア間でスレッドを切り替えたり、スレッドの状態を待機から実行に変更したりすることに関連する不可避の一時停止です。CPU を待っている間隔が長いと、スレッドの枯渇と CPU のオーバーロードが発生する可能性があります。
ETW イベントデータに基づいて計算されます (タイムラインスナップショットのみ)。
待っている時間 : (非同期コードにのみ適用可能) 非同期メソッドがタスクが完了するまで待機する時間間隔。非同期コードを分析する方法を学ぶ
競合のロック : スレッドが、すでに別のスレッドによって取得されているオブジェクトのロックを取得しようとすると発生します *. オブジェクトが解放されるまで、スレッドはブロックされます (つまり、待機状態になります)。場合によっては、いわゆるシリアル実行が発生し、アプリケーションのパフォーマンスに悪影響を与える可能性があります。シリアル実行パターンは、スレッドダイアグラムを使用して簡単に判断できます。スレッドが並列で実行されるのではなく、一度に 1 つのスレッドのみが実行されます。
ETW イベントデータに基づいて計算されます (タイムラインスナップショットのみ)。
サブシステムを構成する
dotTrace を使用すると、カスタムサブシステムを作成し、多数のサブシステムをプロファイルにグループ化できます。
サブシステムを追加するには
メインメニューからオプションダイアログが開きます。
を選択します。左ペインでプロファイルをクリックします。
プロファイルペインで 新しいサブシステムを作成するをクリックし、次に空のサブシステムを追加するをクリックします。
サブシステム定義では:
名前フィールドにサブシステム名を入力します。
適切な色を選択します。
現在のプロファイルでサブシステムを無効にする場合は、現在のプロファイルでサブシステムを有効にするチェックボックスをオフにします。
サブシステムの可視性オプションを指定する:
表示 – サブシステムは別のエントリとして表示されます。
Join – サブシステムの時間は、サブシステムの呼び出し内で計算されます。サブシステムは、参加するサブシステムがない場合にのみ個別に表示されます。
非表示 - サブシステムは非表示になります。サブシステムの時間は計算から除外されます。
- 次に例を示します
MethodA
はSubsystemA
に属し、MethodB
(SubsystemB
に属します) を呼び出し、次にMethodC
(SubsystemC
に属します) を呼び出します。すべてのサブシステムが表示に設定されている場合、サブシステム時間は次のように計算されます。サブシステム A = メソッド A
サブシステム B = メソッド B
サブシステム C = メソッド C
SubsystemB
を結合に設定した場合、サブシステムは次のように計算されます。サブシステム A = メソッド A + メソッド B
サブシステム C = メソッド C
SubsystemB
を非表示に設定した場合、サブシステムは次のように計算されます。サブシステム A = メソッド A
サブシステム C = メソッド C
ルールを管理するには、追加およびクリーンをクリックします。すべてのルールがリストに表示されます。
OK をクリックします。
既存のサブシステムを複製してサブシステムを作成することもできます。
サブシステムを複製するには
メインメニューからオプションダイアログが開きます。
を選択します。左ペインでプロファイルをクリックします。
プロファイルペインで 新しいサブシステムを作成するをクリックし、次に重複サブシステムをクリックします。
サブシステム定義の場合:
必要に応じて、サブシステム名を変更します。
色を再定義します。
ルールを管理するには、追加およびクリーンをクリックします。すべてのルールがリストに表示されます。
OK をクリックします。
いつでも既存のサブシステムに戻って、それらのルールを変更できます。
必要なサブシステムがすべて定義されたら、設定をもう少し調整することができます。考慮する必要のあるすべてのサブシステムは、1 つのプロファイルで集められ、その重要度に従って配置されます。プロファイルは重要なサブシステムまたはアクティブなサブシステムの集合にすぎません。名前を持つことも、名前を付けないこともできます。
メソッドが異なるサブシステムの 2 つのルールに一致する場合、dotTrace は、サブシステムリスト内の他のサブシステムより上位のサブシステムのルールを適用します。
新しいプロファイルを作成するには
メインメニューからオプションダイアログが開きます。
を選択します。左ペインでプロファイルをクリックします。名前のない新しいプロファイルが作成されます。
新しいプロファイルを追加をクリックします。
プロファイル名を指定します。
サブシステムのリストで、対応するチェックボックスを選択して、アクティブなサブシステムのセットを構成します。
オプションで、 選択したサブシステムを上に移動するまたは 選択したサブシステムを下に移動するボタンを使用してサブシステムの順序を変更できます。
OK をクリックします。
サブシステム構成に加えた変更に満足できない場合は、デフォルトにリセットボタンを使用してすぐに提供時のデフォルトにリセットできます。
関連ページ:
基本: プロファイリングタイプ
dotTrace を正常に操作するには、プロファイリングタイプを十分に理解する必要があります。プロファイリングタイプは、プロファイリングセッション中に dotTrace が収集するアプリケーションデータと範囲を定義します。プロファイリングセッションを構成する場合、次のプロファイリングタイプから選択できます: サンプリング、トレース、line-by-line、タイムライン。サンプリング:簡単な概要 dotTrace は、コールスタックデータのサンプルを定期的に取得します。長所: 関数実行時間の正確な測...
ガーベッジコレクション
ガーベッジコレクションフィルターは、GC が実行された時間間隔をフィルタリングすることによってガベージコレクション(GC)を分析するために使用されます。ガーベッジコレクションフィルターの仕組みを理解するためには、基本的な GC の概念を理解しておく必要があります。簡単なガベージコレクションの概念:デスクトップアプリケーションの場合、.NET フレームワークはいわゆるワークステーション GC モードを提供します。ワークステーションガベージコレクションには、フォアグラウンドとバックグラウンドの 2...
非同期呼び出しを分析する
非同期コードの欠点の 1 つは、プロファイルを作成してパフォーマンスを分析するのが難しいことです。これは、非同期メソッドが実行されると、制御が別のスレッドに切り替えられて戻るため、結果の呼び出しツリーがもつれているためです。dotTrace は、非同期コードの分析を大幅に簡素化します。呼び出しツリー内のすべての呼び出しノードをマークし、対応する時間と継続コードをそのノードにグループ化します。つまり、異なる呼び出しスタックで検索するのではなく、非同期呼び出しのすべての「部分」を 1 か所ですばやく...
タスク
タスクイベントは、またはなど、API を介して開始されたタスクの時間間隔を示します。タスクフィルターを使用して、コードビハインドタスクを分析します。構文シュガーを使用してタスクを実行する場合、適用されたタスクフィルターはタスクの実行ノードの背後にコード (より正確には、このコードが実行された時間間隔) のみを残すことに注意してください。継続コードを含むメソッド自体はフィルターの範囲外です。非同期コードの分析の詳細については、「非同期呼び出しを分析する」を参照してください。最終更新日: 2024...