.NET プロセスに接続してプロファイルを作成する
dotTrace を使用すると、システムですでに実行されている .NET/.NET Core プロセスをプロファイリングできます。プロファイリングのワークフローは次のようになります。
セッションを実行してスナップショットを取得する
セッションを開始してスナップショットを取得する
メニューから実行 | プロファイル実行プロセスを選択します。実行中のプロセスのリストが開きます。
プロファイリングするプロセス(これはマネージド .NET プロセスである必要があることに注意してください)と使用するプロファイリング構成を選択します。
プロファイリングが開始されると、dotTrace プロファイラーツールウィンドウがプロファイリングタブで開き、プロファイリングコントローラーが内部に表示されます。
プロファイリング構成で最初からプロファイリングデータを収集するを無効にした場合は、 記録の開始をクリックしてプロファイリングデータの記録を開始します。
探しているパフォーマンスの問題を再現するか、アプリ全体のパフォーマンスを評価するだけの場合は、アプリケーションで必要な使用シナリオを実行します。
スナップショットを取得するをクリックします。収集されたスナップショットは、dotTrace プロファイラーウィンドウ内のスナップショットのリストに追加されます。プロファイリングデータの収集を再開するには、 記録の開始をもう一度クリックします。
スナップショットを収集したら、プロファイリングセッションを終了できます。通常は、プロファイリングされたアプリケーションを閉じるか、 切り離すボタンを使ってプロファイラーをデタッチすることで行います( 強制終了はプロファイリングされたアプリケーションとセッションを強制的に終了させるため、緊急の場合にのみ使用してください)。
収集されたスナップショットの分析
パフォーマンススナップショットの分析の詳細については、「プロファイリング結果を分析する」を参照してください。
スナップショットを分析する
dotTrace プロファイラーツールウィンドウのすべてのスナップショットタブで、分析するスナップショットを選択します。
いずれかのビューを使用して収集データを分析します。
呼び出しツリー : すべてのスレッドにおけるすべてのメソッド呼び出しを表示する「古典的な」呼び出しツリー。各最上位ノードは、特定のスレッドによって実行された最上位関数を表します。このビューを使用して、実際のアプリケーションアクティビティにすばやくアクセスします。詳細
トップメソッド : アプリケーションのパフォーマンスを分析する際の最適な開始点です。これは、実行時間が最長のメソッドの単純なリストです。 トグルを使用してリストからシステム関数を除外することで、システム関数の「ノイズ」を削減できることに注意してください。有効にすると、メソッドの実行時間は、メソッド自体の時間とすべての子システムメソッド (スタック内の次のユーザーメソッドまで) の時間の合計として計算されます。詳細
疑わしい方法が見つかったら、F4 を押すか、コンテキストメニューからソースに移動を選択します。Rider はあなたをそのメソッドのソースコードへと移動します。
プロファイリング構成について
プロファイリングセッションを開始する前に、使用するプロファイリング構成を決定する必要があります。通常、どちらかを決定します
プロファイリング構成は、使用するプロファイリングタイプ、子プロセスをプロファイリングする必要があるかどうかなどのプロファイリングセッション設定を指定します。
プロファイリングターゲットは、接続しようとしている実行中の .NET プロセスです。
カスタムプロファイリング構成を作成する
メニューから実行 | スイッチプロファイリング設定 | 実行構成の編集を選択します。
開いたプロファイリング設定ウィンドウで、 をクリックして新しいプロファイリング設定を追加します。
リストで、プロファイリングタイプのいずれかを選択します。
タイムライン
スレッドの状態、アプリケーションイベント、その他のマルチスレッドデータに関する一時データを収集します。Windows では、タイムラインプロファイリングは Event Tracing for Windows (ETW) に基づいており、管理者権限で JetBrains ETW ホストサービスを実行する必要があります。macOS および Linux では、外部サービスは必要ありません。ネイティブプロファイリングをサポートします。
ほとんどの場合に推奨されます。特に、マルチスレッドアプリを分析する場合に有効です。たとえば、UI のフリーズ、過剰なガベージコレクション、不均一なワークロード分散、不十分な I/O などの原因を特定する場合に使用します。
Mono または Unity アプリケーションをプロファイルするための構成を作成したい場合は、それに応じてタイムライン (Mono) またはタイムライン (Unity) を選択してください。
サンプリング
正確な時間測定、呼び出し数の測定は行われません。
ほとんどの場合に推奨されます。アプリのパフォーマンスの問題を初めて探すときに理想的です。
macOS および Linux で、.NET Core 3.0 以前を対象とするアプリケーションをプロファイリングする場合は、サンプリング (.NET Core 3.0 以前) を選択します。.NET Core の制限により、問題が発生する可能性があることに注意してください。プロファイルされたアプリケーションがハングまたはクラッシュする可能性があります。.NET Core 3.1(またはそれ以降)を対象とするプロジェクトは、問題なくプロファイリングできます。
トレース
正確なコールは測定をカウントし、時間測定はプロファイリングオーバーヘッドのために不正確になる場合があります。
サンプリングデータが足りないとき。例: アルゴリズムの複雑さを分析するため(呼び出し回数に関する情報が呼び出し時間の値よりも価値がある場合)。
1 行ずつ
Windows のみ。
コードの各行は測定されます。呼び出し時間の値は巨大なプロファイラーオーバーヘッドのため不正確です。
高度なユースケースのみ。例: どの機能が問題を引き起こしているのかを知っていて、その各行を分析したいとき。
構成名前とその他のプロファイリングオプションを指定します。
- プロファイリングを手動で制御する
プロファイラーコントロールを介して手動でプロファイリングを制御できます。例: スナップショットを撮るには、スナップショットを取得するをクリックする必要があります。
- 最初からプロファイリングデータを収集する
選択した場合、dotTrace は起動直後にプロファイリングデータの収集を開始します。それ以外の場合、dotTrace は、dotTrace プロファイラーツールウィンドウで記録の開始をクリックした後にのみデータの収集を開始します。
- API によるプロファイルの制御
プロファイルされたアプリケーションのコードから直接プロファイリングを制御できます。例: コードの正確なポイントでスナップショットを取得します。API の使用について詳しくは、dotTrace のドキュメントを参照してください。
- プロファイルの子プロセス
選択すると、dotTrace はメインのアプリプロセスだけでなく、それが実行するプロセスもプロファイルします。
- プロファイル .NET5 + 子プロセス
(macOS および Linux のタイムライン)
選択した場合、dotTrace は、メインのアプリプロセスだけでなく、それが実行するプロセスもプロファイリングします。.NET5 以降のプロセスのみがサポートされています。
- サンプリングレート
(Windows のタイムライン)
dotTrace は Windows カーネルからスタックトレースデータを取得します。デフォルトでは、カーネルは 1 秒あたり 1000 個のサンプルイベントを提供します。サンプリングレートを最大 8000 サンプル / 秒まで増やすことができます。これは、たとえばゲーム開発で、高速に実行されるネイティブコードをプロファイリングする場合に理にかなっています。サンプリングレートが高いほど、結果の精度は高くなりますが、スナップショットのサイズは大きくなります。
- 時間測定
(サンプリング、Windows でのトレース、行単位)
このオプションは、dotTrace が呼び出し時間を計算する方法を定義します。通常、これは、スレッドが動作していないときに dotTrace が時間を計算するかどうかの選択です。詳細については、dotTrace のドキュメントを参照してください。
リアルタイム (パフォーマンスカウンタ)
推奨。dotTrace は、メソッドの開始から終了までの間に経過した全体の実時間を計算します。この時間は、アプリスレッドの状態に依存しません。時間は、システムパフォーマンスカウンターを使用して計算されます。
リアルタイム (CPU 命令)
dotTrace は、メソッドの開始から終了までの間に経過した全体的な実時間を計算します。この時間は、アプリのスレッドの状態に依存しません。時間は CPU レジスタを使用して計算されます。
スレッド時間
dotTrace は特定のスレッドが実行中の時間のみを計算します。スレッドが待機中またはスリープ中の時間は計算に含まれません。
スレッドサイクル時間
dotTrace は特定のスレッドが実行中の時間のみを計算します。スレッドが待機中またはスリープ中の時間は計算に含まれません。時間は CPU レジスタを使用して計算されます。
- インライン化を有効にする
(トレース、行ごと)
dotTrace で JIT インライン化をオフにし、アプリケーションのソースコードの構造に近い呼び出しスタックを取得する場合は、このオプションをオフにします。
- 高い正確性
(トレース、行ごと)
選択すると、dotTrace はより多くの時間サンプルを取得して、プロファイラー自体で費やされた時間を考慮します。
- ネイティブプロファイリングを有効にする
(タイムライン、Windows では Unity/Mono)
選択した場合、dotTrace はネイティブのコールスタックデータを収集します。結果のスナップショットには、マネージドコールスタックとネイティブコールスタックの両方が含まれます。このプロファイリングオプションは、Unity ゲームのパフォーマンスの問題を見つけるのに役立つ場合があります。
- ネイティブ割り当てを収集する
(Windows のタイムライン)
選択すると、dotTrace は、プロファイリングされたアプリケーションがネイティブ (アンマネージド) ヒープ内で行うすべてのメモリ割り当てに関する情報を収集します。
... KB ごとのサンプル割り当ては、メモリ割り当てサンプルをトリガーする割り当てメモリのサイズを定義します。デフォルト値は 100 KB です。これは、割り当てられたメモリのサイズが合計 100 KB を超えるとサンプルがトリガーされることを意味します。例: ネイティブスレッドは、プロファイリング中に 50 KB のメモリブロックを 5 つ割り当てます。このような場合、dotTrace は 100 KB の割り当てを 2 つだけ検出します。
サイズが小さいほど、結果はより正確になり、スナップショットは大きくなります。このオプションを使用して、データの精度とスナップショットサイズ間の最適なバランスを見つけます。
未リリースの割り当てのみを収集するを選択した場合、dotTrace は、スナップショットを作成した時点でまだアンマネージヒープ内にあった割り当てに関するデータのみをスナップショットに保存します。
- TPL イベントを収集する
(タイムライン)
選択すると、プロファイリングのパフォーマンスに影響する可能性がありますが、dotTrace はタスク並列ライブラリ (TPL) データを収集します。選択を解除すると、呼び出しツリーに
Task
ノードは表示されなくなり、async
呼び出しノードは待機部分と継続部分なしで表示されます。アプリケーションがマルチタスクを使用しない場合、またはこの情報が必要ない場合は、このオプションをクリアしてください。
- デバッグ出力を収集する
(Windows のタイムライン)
選択した場合、dotTrace は、プロファイルされたアプリケーションがデバッグ出力に送信するすべてのメッセージに関する情報を収集します。
- シンボルファイルをダウンロードする
(Windows のタイムライン)
PDB ファイル (またはシンボルファイル) を使用すると、コールツリーでネイティブ関数を確認できます。これは、ネイティブアプリケーションと、ネイティブコードを呼び出すマネージドアプリケーションに関係します。シンボルファイルのダウンロードを選択すると、JetBrains Rider はスナップショットを取得した直後にリモートサーバーから PDB ファイルのダウンロードを試みます。ファイルのサイズによっては、これにはかなりの時間がかかる場合があることに注意してください。
デフォルトでは、JetBrains Rider は
_NT_SYMBOL_PATH
環境変数で指定された場所で PDB ファイルを検索します。また、、configure のシンボルサーバーのリンクを使用して、カスタム、ローカルまたはリモート場所を指定することができます。バックグラウンドでのダウンロードが有効になっている場合、dotTrace はプロファイリングセッションの実行中にシンボルファイルのダウンロードを開始します。これは、スナップショットの取得時間を短縮するのに役立つ場合があります。
関連ページ:
dotTrace プロファイラーウィンドウ
このウィンドウでは、.NET アプリケーションのパフォーマンスのボトルネックをプロファイルして分析できます。dotTrace プロファイラーは、以下で構成されるマルチタブウィンドウです。収集されたスナップショットを開くために使用されるすべてのスナップショットタブ、プロファイリングセッションを制御するために使用されるプロファイリングタブ。収集されたパフォーマンススナップショットを分析するために使用される分析タブ。すべてのスナップショットタブ:すべてのスナップショットタブは、以前に収集されたスナッ...
プロファイリング結果を分析する
アプリケーションの実行が遅すぎると、問題を特定して実行するアクションを理解することが困難になる可能性があります。アプリケーションのプロファイリングとパフォーマンススナップショットの取得後の次のステップは、スナップショットを開いてデータを分析することです。通常、パフォーマンス分析の最終的なゴールは、パフォーマンスの問題を引き起こす特定の方法を特定することです。このタスクの実行を支援するために、dotTrace プロファイラーウィンドウには、呼び出しツリーとホットスポットの 2 つのビューがあります...
呼び出しツリー
呼び出しツリーはメソッド実行パスを示します。ツリー内の各メソッドノードは、特定のスレッドによって実行されるトップレベルのメソッドを表します。メソッドノードには、呼び出されたメソッドとプロファイリング時に収集されたメトリクスがリストされます。呼び出しツリーを使用して: アプリケーションアクティビティの簡単な概要を取得する: 最も「高額な」呼び出しを移動するまたはフレームグラフを使用します。最も遅いメソッド (最も時間がかかるメソッド、または頻繁に呼び出されるメソッド) の実行パスを次の方法で調べます。...
ホットスポット
Hotspots は、選択したすべてのスレッドのメソッドのリストを実行時間順に表示します。他のフィルターと組み合わせてホットスポットを使用して、特定の条件で「トップ」メソッドを決定します。例:
API を使用したプロファイリングセッションの制御
プロファイリング API は、プロファイリングプロセスを制御できるようにする多数のクラスを提供します。例: アプリケーションのコードから、次のことができます。プロファイリングデータの収集を開始する:,、データ収集を停止する:,、データをディスクに保存する:,、その他、API クラスの詳細については、API 参照を参照してください。プロファイリング API を使用する必要がある主なシナリオは 2 つあります。コードの特定部分のプロファイリング、自己プロファイルアプリケーション。コードの特定の部分をプ...
非同期呼び出しを分析する
非同期コードの欠点の 1 つは、プロファイルを作成してパフォーマンスを分析するのが難しいことです。これは、非同期メソッドが実行されると、制御が別のスレッドに切り替えられて戻るため、結果の呼び出しツリーがもつれているためです。dotTrace は、非同期コードの分析を大幅に簡素化します。呼び出しツリー内のすべての呼び出しノードをマークし、対応する時間と継続コードをそのノードにグループ化します。つまり、異なる呼び出しスタックで検索するのではなく、非同期呼び出しのすべての「部分」を 1 か所ですばやく...