dotTrace 2024.3 ヘルプ

プロファイリングセッションの構成

プロファイリングセッションを構成するには、次のことを行う必要があります。

  1. プロファイルするアプリケーションを dotTrace で実行する方法を指定します。これは、実行構成を使用して行うことができます。すでに実行中のアプリケーションのプロファイルを作成する場合、この手順は必要ありません。

  2. dotTrace がアプリケーションをプロファイリングする方法を指定します。プロファイリングタイプを選択し、(オプションで) 時間測定タイプ、プロセスフィルターなどのその他のプロファイリングオプションを構成します

1. 実行構成の作成

実行構成は、プロファイルされたアプリケーションをどのように実行するかを dotTrace に指示する方法です。例: スタンドアロン .NET アプリケーションの実行構成には、アプリケーション実行可能ファイルへのパス、コマンドライン引数、アプリケーション作業ディレクトリへのパスが含まれます。

プロファイルされたアプリケーションの実行構成がすでにある場合は、プロファイルするものを選択してください新しいプロセスの実行からこの実行構成を選択します。それ以外の場合は、以下の手順に従って実行構成を作成します。

実行構成の作成方法

  1. プロファイルするものを選択してください新しいプロセスの実行で、Add run configuration 実行構成を追加するをクリックします。

  2. 新規実行構成ウィザードで、アプリケーションタイプを選択し、アプリケーションオプションを指定します。

  3. 保存をクリックします。これにより、実行構成が作成および保存されます。次回このアプリケーションのプロファイルを作成する必要がある場合は、新しいプロセスの実行リストから作成した構成を選択します。

2. プロファイリングタイプの選択

プロファイルする方法を選択しますプロファイリングタイプでプロファイリングタイプを選択します。

プロファイリングタイプは、dotTrace がプロファイリングデータを収集する方法と、その結果として収集されるデータの量とタイプを定義します。次の表は、最適なプロファイリングタイプを選択できます。詳細については、基本: プロファイリングタイプを参照してください。

説明

ユースケース

タイムライン

スレッドの状態、アプリケーションイベント、その他のマルチスレッドデータに関する時間データを収集します。Windows では、タイムラインプロファイリングは Event Tracing for Windows (ETW) に基づいており、管理者権限で JetBrains ETW ホストサービスを実行する必要があります。macOS および Linux では、外部サービスは必要ありません。ネイティブプロファイリングをサポートします。

ほとんどの場合に推奨されます。特に、マルチスレッドアプリを分析する場合に有効です。たとえば、UI のフリーズ、過剰なガベージコレクション、不均一なワークロード分散、不十分な I/O などの原因を特定する場合に使用します。

サンプリング

正確な時間測定、呼び出し数の測定は行われません。

ほとんどの場合に推奨されます。アプリのパフォーマンスの問題を初めて探すときに理想的です。

トレース

正確なコールは測定をカウントし、時間測定はプロファイリングオーバーヘッドのために不正確になる場合があります。

サンプリングデータが足りないとき。例: アルゴリズムの複雑さを分析するため(呼び出し回数に関する情報が呼び出し時間の値よりも価値がある場合)。

1 行ずつ

Windows のみ。

コードの各行は測定されます。呼び出し時間の値は巨大なプロファイラーオーバーヘッドのため不正確です。

オーバーヘッドを下げるために、フィルターを使用して特定のメソッドのみをプロファイリングできます。

高度なユースケースのみ。例: どの機能が問題を引き起こしているのかを知っていて、その各行を分析したいとき。

3. 他のプロファイリングオプションを構成する

サンプリングレート

(Windows のタイムライン)

dotTrace は Windows カーネルからスタックトレースデータを取得します。デフォルトでは、カーネルは 1 秒あたり 1000 個のサンプルイベントを提供します。サンプリングレートを最大 8000 サンプル / 秒まで増やすことができます。これは、たとえばゲーム開発で、高速に実行されるネイティブコードをプロファイリングする場合に理にかなっています。サンプリングレートが高いほど、結果の精度は高くなりますが、スナップショットのサイズは大きくなります。

プロファイリングの制御

手動 (デフォルト)

プロファイリングコントローラーウィンドウのボタンを使用して、プロファイリングセッションを制御します。例: スナップショットを撮るには、スナップショットを取得して待機するをクリックします。

API の使用

プロファイルされたアプリケーションのコードから直接プロファイリングを制御します。例: コードの正確なポイントでスナップショットを取得するには、MeasureProfiler.SaveData() 関数を呼び出します。API によるプロファイリングプロセスの制御での API の使用の詳細を参照してください。

Linux および macOS のスタンドアロンアプリケーションのタイムラインプロファイリングタイプでは使用できません。

時間測定

(サンプリング、Windows でのトレース、行単位)

このオプションは、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 ファイル (またはシンボルファイル) を使用すると、コールツリーでネイティブ関数を確認できます。これは、ネイティブアプリケーションと、ネイティブコードを呼び出すマネージドアプリケーションに関係します。シンボルファイルのダウンロードを選択すると、dotTrace はスナップショットを取得した直後にリモートサーバーから PDB ファイルのダウンロードを試みます。ファイルのサイズによっては、これにはかなりの時間がかかる場合があることに注意してください。

デフォルトでは、dotTrace は _NT_SYMBOL_PATH 環境変数で指定された場所で PDB ファイルを検索します。または、シンボルファイルの場所を編集するを使用してカスタムローカルまたはリモートの場所を指定することもできます。

バックグラウンドでのダウンロードが有効になっている場合、dotTrace はプロファイリングセッションの実行中にシンボルファイルのダウンロードを開始します。これは、スナップショットの取得時間を短縮するのに役立つ場合があります。

最初からプロファイリングデータを収集する

選択した場合、dotTrace は起動直後にプロファイリングデータの記録を開始します。それ以外の場合、dotTrace は、プロファイリングコントローラーウィンドウで開始をクリックした後にのみ、これらのデータの収集を開始します。

4. (オプション) プロセスフィルターを構成する

プロファイルされたアプリケーションが多数のプロセスを作成する場合は、プロセスフィルター設定を使用して、プロファイルするプロセスを指定します。事前定義されたフィルターを選択するか、新しいフィルターを作成することができます。

プロセスフィルターは、選択した実行構成で指定されたアプリケーションタイプによって動作が異なることに注意してください。

アプリの種類

説明

スタンドアロン

.NET と .NET Core

Mono

Unity

Unreal Engine

dotTrace は、指定されたフィルターに一致するプロセスのみをプロファイルします。フィルターは、プロファイルされたプロセスのプロセスツリー全体(子プロセスを含む)に適用されます。

例: 多数の子プロセスを作成するマネージドプロセスがあります。メインプロセスだけでなく、名前に service が含まれる子プロセスもプロファイリングする必要があります。これを行うには、*service* インクルードフィルターを追加します。

外部 .NET プロセス

このモードでは、プロファイリングセッションを開始しても、プロファイリングされたプロセスは開始されません。代わりに、dotTrace はオペレーティングシステムで最初に開始された管理対象プロセスを待機し、そのプロセスにアタッチします。特定のプロセスフィルターが選択されると、dotTrace はフィルターに一致する最初のプロセスにアタッチします。

例: インクルードフィルターを作成しました: *service*dotTrace は、名前に service が含まれるシステムの最初のプロセスに接続します。

IIS

IIS Express

Windows サービス

WCF サービス

WinRT

MAUI

プロセスフィルターは適用されません。

プロセスフィルターを選択するには

  1. プロファイルする方法を選択します拡張オプションで、プロセスフィルターリストを開きます。

  2. 必要なフィルターを選択します。

    dotTrace は、2 つの事前定義されたフィルターを提供します。

    • デフォルト : プロセスフィルターは適用されません。

    • プロセスツリー全体 : dotTrace は、子プロセスを含むプロセスツリー全体をプロファイリングします。.NET プロセス実行構成が選択されている場合、dotTrace は、システムで開始された最初の管理対象プロセス (そのすべての子プロセスを含む) に接続してプロファイリングします。

    Select a predefined filter

プロセスフィルターを作成するには

  1. プロファイルする方法を選択します拡張オプションで、プロセスフィルターリストを開きます。

  2. フィルターの追加を選択します。

  3. フィルター設定を指定します。

    • 名前 : フィルター名。

    • プロセスツリー全体のプロファイル : 選択すると、dotTrace は子プロセスを含むプロセスツリー全体をプロファイルします。このオプションを無効にすることは、.NET プロセス実行構成のフィルターを作成する場合にのみ意味があります。この場合、dotTrace はフィルターに一致するシステム内の最初のプロセスを待機してアタッチしますが、このプロセスの子プロセスはプロファイルしません。

    • フィルターマスクを含めるフィルターマスクを除外する : それに応じてフィルターマスクを含めたり除外したりします。マスクは、次のルールに従って適用されます。

      • デフォルトのポリシーは「profileall」です。

      • インクルードマスクが最初に適用されます。除外マスクは、包含マスクによってフィルタリングされたプロセスに適用されます。

      • アスタリスク * ワイルドカードを使用できます。

      例: MyService を除く名前に Service が含まれるすべての子プロセスをプロファイリングするには、*Service* インクルードマスクと MyService エクスクルードマスクを追加します。

  4. 保存をクリックします。

5. (オプション) 行ごとのプロファイリングのフィルターを構成する

行ごとのプロファイリングは、特定のケースでは効果的かもしれませんが、常に時間がかかります。プロファイリングのオーバーヘッドを最小限に抑えるために、いくつかのルールを定義することができます。そのルールに従って、すべての関数が行ごとにプロファイリングされるのではなく、さらに調査する必要がある関数だけがプロファイリングされます。

必要な関数 / クラス / アセンブリのみに一致する 1 つまたは複数のフィルターを作成および設定できます。

行ごとのプロファイリング用のフィルターを作成するには

  1. プロファイルする方法を選択しますで、1 行ずつプロファイリングタイプを選択します。

  2. フィルターの編集をクリックします。

  3. フィルターの編集ダイアログで Add filter フィルターの追加をクリックします。

  4. フィルター型の選択:

    • プロファイルコード : 指定されたコード項目をプロファイリングに含め、他のすべてのコード項目を除外します。

    • コードをプロファイルしない : 指定されたコード項目をプロファイリングから除外します。

    • 属性でマークされたコードをプロファイルしない : 指定された属性を持つコードアイテムをプロファイリングから除外します。

  5. 最初の 2 つのオプションのいずれかを選択した場合は、プロファイリングに含めるか除外するアセンブリ、クラス、メソッドを指定します。コード項目は互いに独立してフィルター処理されます。例: メソッドを指定し、アセンブリとクラスにアスタリスク * を残すと、指定した名前のメソッドがすべてのアセンブリとすべてのクラスから除外されます。

  6. 最後のオプションを選択した場合は、プロファイリングからシンボルを除外するために使用する属性の名前を指定します。オプションで、この属性が宣言されているアセンブリ名を指定します。

    フィルターでコード項目名を指定するときに、アスタリスクのワイルドカードを使用できます。* (アスタリスク)は、0 個以上の文字を表します。例: *.Tests ワイルドカードは、すべてのテストプロジェクトをコード分析から除外します。

  7. OK をクリックします。

関連ページ:

プロファイル実行プロセス

スタンドアロンアプリケーションとして dotTrace を実行する。dotTrace ホームウィンドウが開きます。プロファイルするものを選択してください、実行中のプロセスで、プロファイルするプロセスを選択します。(Windows のみ) 探しているプロセスが見つからない場合は、すべてのプロセスを表示するをクリックして dotTrace 管理権限を付与します。作成した実行構成が新しいプロセスの実行リストで選択されていることを確認してください。プロファイルする方法を選択しますで、プロファイリングオプシ...

IIS サーバー上のプロファイル Web アプリケーション

通常、Web アプリケーションのパフォーマンスの問題を特定するには、アプリケーションがすでにサーバー上で実行されている必要があります。次の表は、アプリケーションのプロファイリングに可能なすべてのオプションをまとめたものです。ローカルプロファイリング簡単な設定 / 使用: dotTrace の GUI を使ってプロファイルを作成します、dotTrace をサーバーにインストールして実行する必要があります。これは、セキュリティの制限や GUI の不在などの理由で不可能な場合があります。コマンドライン...

非同期呼び出しを分析する

非同期コードの欠点の 1 つは、プロファイルを作成してパフォーマンスを分析するのが難しいことです。これは、非同期メソッドが実行されると、制御が別のスレッドに切り替えられて戻るため、結果の呼び出しツリーがもつれているためです。dotTrace は、非同期コードの分析を大幅に簡素化します。呼び出しツリー内のすべての呼び出しノードをマークし、対応する時間と継続コードをそのノードにグループ化します。つまり、異なる呼び出しスタックで検索するのではなく、非同期呼び出しのすべての「部分」を 1 か所ですばやく...

デバッグ出力

デバッグ出力フィルターは、アプリケーションがデバッグ出力に書き込むイベントを示します。システムメソッドを使用します (実際、dotTrace はシステム関数のすべての呼び出しを追跡します)。デバッグ出力を選択すると、呼び出しツリーは出力に書き込むメソッドのみを表示します。高度なデバッグにはデバッグ出力イベントを使用します。デバッグ出力: 文字列:サブフィルターは、特定のメッセージがデバッグ出力に送信されたポイントイベントをフィルターに掛けるために使用されます。デバッグ出力を適用するには: 文字...