サブシステム
サブシステム フィルターを使用すると、特定のコールツリーの時間が、ユーザーとシステムコード、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 を使用すると、カスタムサブシステムを作成し、多数のサブシステムをプロファイルにグループ化できます。
サブシステムを追加するには
メインメニューから を選択します。 「オプション 」ダイアログが開きます。
左ペインで プロファイル一覧 をクリックします。
プロファイル一覧 ペインで
新しいサブシステムを作成する をクリックし、次に 空のサブシステムを追加する をクリックします。サブシステム定義 では:
命名 フィールドにサブシステム名を入力します。
適切な 色 を選択します。
現在のプロファイルでサブシステムを無効にする場合は、 現在のプロファイルでサブシステムを有効にする チェックボックスをオフにします。
サブシステムの可視性オプションを指定する:
表示 – サブシステムは別のエントリとして表示されます。
参加 – サブシステムの時間は、サブシステムの呼び出し内で計算されます。 サブシステムは、参加するサブシステムがない場合にのみ個別に表示されます。
非表示 - サブシステムは非表示になります。 サブシステムの時間は計算から除外されます。
- 例
MethodAはSubsystemAに属し、MethodB(SubsystemBに属する)を呼び出し、その後MethodC(SubsystemCに属する)を呼び出します。 すべてのサブシステムを 表示 に設定すると、サブシステムの時間は次のように計算されます:
SubsystemA = MethodA
SubsystemB = MethodB
SubsystemC = MethodCSubsystemBを 参加 に設定した場合、サブシステムは次のように計算されます:
SubsystemA = MethodA + MethodB
SubsystemC = MethodCSubsystemBを 非表示 に設定した場合、サブシステムは次のように計算されます:
SubsystemA = MethodA
SubsystemC = MethodC
ルールを管理するには、 追加する および クリーン をクリックします。 すべてのルールがリストに表示されます。
OK をクリックします。
既存のサブシステムを複製してサブシステムを作成することもできます。
サブシステムを複製するには
メインメニューから を選択します。 「オプション 」ダイアログが開きます。
左ペインで プロファイル一覧 をクリックします。
プロファイル一覧 ペインで
新しいサブシステムを作成する をクリックし、次に 重複サブシステム をクリックします。サブシステム定義 の場合:
必要に応じて、 サブシステム名 を変更します。
色 を再定義します。
ルールを管理するには、 追加する および クリーン をクリックします。 すべてのルールがリストに表示されます。
OK をクリックします。
いつでも既存のサブシステムに戻って、それらのルールを変更できます。
必要なサブシステムがすべて定義されたら、設定をもう少し調整することができます。 考慮する必要のあるすべてのサブシステムは、1 つのプロファイルで集められ、その重要度に従って配置されます。 プロファイルは重要なサブシステムまたはアクティブなサブシステムの集合にすぎません。 名前を持つことも、名前を付けないこともできます。
メソッドが異なるサブシステムの 2 つのルールに一致する場合、dotTrace は、サブシステムリスト内の他のサブシステムより上位のサブシステムのルールを適用します。
新しいプロファイルを作成するには
メインメニューから を選択します。 「オプション 」ダイアログが開きます。
左ペインで プロファイル一覧 をクリックします。 名前のない新しいプロファイルが作成されます。
新規プロファイルの追加 をクリックします。プロファイル名を指定します。
サブシステムのリストで、対応するチェックボックスを選択して、アクティブなサブシステムのセットを構成します。
オプションで、
選択したサブシステムを上に移動する または
選択したサブシステムを下に移動する ボタンを使用してサブシステムの順序を変更できます。OK をクリックします。
サブシステム構成に加えた変更に満足できない場合は、 デフォルトにリセット ボタンを使用してすぐに提供時のデフォルトにリセットできます。