JetBrains Rider 2020.1ヘルプ

アプリケーションのプロファイリング

どのアプリケーションタイプをプロファイルするかにかかわらず、ワークフローは常に同じであり、次の要素で構成されています。

  1. プロファイリングセッションの設定
  2. セッションを実行してスナップショットを取得する
  3. 収集したスナップショットの分析

ステップ 1. プロファイリングセッションの設定

Profiling configurations in Rider

プロファイリングセッションを開始する前に、プロファイリング設定を選択する必要があります。

  • プロファイリング構成は、使用するプロファイリングタイプ、子プロセスをプロファイリングする必要があるかどうかなどのプロファイリングセッション設定を指定します。

  • プロファイリングターゲットは常に 現在選択されている実行構成 で指定された実行可能ファイル*です。

  • 現在、次の実行構成タイプをプロファイルできます。

    他の種類の実行構成を選択した場合は、ツールバーのプロファイリングコントロールが無効になります。

プロファイリング構成を選択する

  • ツールバーのプロファイリング設定のリストで、以下を選択します。

    • サンプリングトレース1行ずつタイムラインタイムライン (Mono)(Monoアプリ用)、タイムライン (Unity)(Unityアプリ用)のいずれかの事前定義済み構成

    • または独自のカスタム設定

プロファイリング構成を作成する

  1. ツールバーのプロファイリング構成のリストで、構成の編集...を選択する

  2. 開いたプロファイリング設定ウィンドウで、Add profiling configuration をクリックして新しいプロファイリング設定を追加します。

  3. リストで、プロファイリングタイプのいずれかを選択します。
    サンプリング

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

    ほとんどの場合におすすめ。初めてアプリでパフォーマンスの課題を探すときに理想的です。

    macOSおよびLinuxで、.NET Core 3.0以前を対象とするアプリケーションのプロファイルを作成する場合は、サンプリング (.NET Core 3.0以前)を選択します。.NET Coreの制限により、課題が発生する可能性があることに注意してください。プロファイルされたアプリケーションがハングまたはクラッシュする可能性があります。.NET Core 3.1を対象とするプロジェクトは、課題なくプロファイルできます。

    トレース

    正確なコール数測定、プロファイリングオーバーヘッドのために時間測定が不正確になることがあります。

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

    1行ずつ

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

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

    タイムライン

    スレッド状態、アプリケーションイベント、およびその他のマルチスレッドデータに関する一時的なデータを収集します。Windows(ETW)のイベントトレースに基づいています。

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

    MonoまたはUnityアプリケーションをプロファイルするための構成を作成したい場合は、それに応じてタイムライン (Mono)またはタイムライン (Unity)を選択してください。

  4. 構成名前とその他のプロファイリングオプションを指定します。

    • プロファイリングを手動で制御する
      プロファイラーコントロールを使用して、プロファイリングを手動で制御できます。例:スナップショットを取得するには、スナップショットを取得するをクリックする必要があります。

    • 最初からプロファイリングデータを収集する : 選択すると、dotTraceは起動直後にプロファイリングデータの収集を開始します。それ以外の場合は、パフォーマンスプロファイラ ツールウィンドウで記録の開始をクリックした後にのみdotTraceがデータの収集を開始します。

    • APIによるプロファイルの制御
      プロファイルされたアプリケーションのコードからプロファイリングを直接制御できます。例:コードの正確なポイントでスナップショットを作成します。APIの使用の詳細については、dotTraceのドキュメントを参照してください。

    • プロファイルの子プロセス
      選択すると、dotTraceはメインのアプリプロセスだけでなく、それが実行するプロセスもプロファイルします。

    • 時間測定
      このオプションは、dotTraceが呼び出し時間を計算する方法を定義します。通常、これは、dotTraceがスレッドが動作していないときに時間を計算するかどうかの選択です。詳細については、dotTraceのドキュメントを参照してください。

      リアルタイム (パフォーマンスカウンタ)

      推奨。dotTraceは、メソッドの開始から終了までの全体のリアルタイムを計算します。この時間はアプリスレッドの状態に依存しません。時間は、システムパフォーマンスカウンターを使用して計算されます。

      リアルタイム (CPU命令)

      dotTraceは、メソッドの入り口と出口の間に渡される全体のリアルタイムを計算します。今回はアプリスレッドの状態には依存しません。時間はCPUレジスタを使用して計算されます。

      スレッド時間

      dotTraceは特定のスレッドが実行されている時間だけを計算します。スレッドが待機またはスリープしている時間は計算に含まれません。

      スレッドサイクル時間

      dotTraceは特定のスレッドが実行されている時間だけを計算します。スレッドが待機またはスリープしている時間は計算に含まれません。時間はCPUレジスタを使用して計算されます。

      このセクションの次の表は、あなたのケースに適した時間測定方法を選択できます。

    • インライン化を有効にする
      (トレース、行ごと)dotTraceでJITインライン化をオフにし、アプリケーションのソースコードの構造によく似た呼び出しスタックを取得する場合は、このオプションをオフにします。

    • 高い正確性
      (トレース、行ごと)選択すると、dotTraceはより多くの時間サンプルを取得することにより、プロファイラー自体で費やされた時間を考慮します。

    • ネイティブ割り当てを収集する
      (タイムライン)選択された場合、dotTraceはプロファイリングされたアプリケーションがネイティブな(管理されていない)ヒープで行うすべてのメモリ割り当てについての情報を収集します。このオプションを選択するには、Windowsパフォーマンスツールキット(英語)がコンピューターにインストールされている必要があります。

    • デバッグ出力を収集する
      (タイムライン)選択すると、dotTraceは、プロファイルされたアプリケーションがデバッグ出力に送信するすべてのメッセージに関する情報を収集します。

    • TPLイベントを収集する
      (タイムライン)選択すると、プロファイリングのパフォーマンスに影響が出る可能性がありますが、dotTraceはタスクパラレルライブラリ(TPL)データを収集します。オフにした場合、呼び出しツリーasync 呼び出しノードには Task ノードが自分のawait継続部品が不足しているんだろうが存在します。dotTraceが非同期コードとどのように機能するかについては、dotTraceのドキュメントを参照してください。
      アプリケーションでマルチタスクを使用しない場合、またはこの情報が必要ない場合は、このオプションをオフにします。

ステップ 2. セッションの実行とスナップショットの取得

セッションを開始してスナップショットを取得する

  1. ツールバーで、プロファイルを作成する実行構成を選択します。

  2. 実行 | 'profiling_config_name' を使用したプロファイル 'run_config_name' を選択するか、またはツールバーの対応するボタンをクリックしてください。

    Start profiling session

    プロファイリングが開始されると、プロファイリングタブ上にプロファイリングコントローラーが開いた状態でパフォーマンスプロファイラツールウィンドウが開きます。

  3. プロファイリング設定で最初からプロファイリングデータを収集するを無効にした場合は、Start Recording 記録の開始をクリックしてプロファイリングデータの記録を開始します。
    基本的に、今必要なのは探しているパフォーマンスの課題を再現することだけです、あるいは全体的なアプリパフォーマンスを評価するなら、あなたのアプリケーションで望ましい使用シナリオを通過してください。

  4. Get Performance Snapshot Rider スナップショットを取得するをクリックしてください。収集されたスナップショットは、パフォーマンスプロファイラウィンドウ内のスナップショットのリストに追加されます。プロファイリングデータの収集を再開するには、もう一度 Start Recording 記録の開始をクリックします。

  5. スナップショットを収集したら、プロファイリングセッションを終了できます。通常は、プロファイリングされたアプリケーションを閉じるか、Detach profiler 切り離すボタンを使ってプロファイラーをデタッチすることで行います( Kill processes 強制終了はプロファイリングされたアプリケーションとセッションを強制的に終了させるため、緊急の場合にのみ使用してください)。

ステップ 3. 収集したスナップショットの分析

パフォーマンススナップショットの分析方法の詳細については、プロファイリング結果の分析を参照してください。

スナップショットを分析する

  1. パフォーマンスプロファイラツールウィンドウのすべてのスナップショットタブで、分析したいスナップショットを選択します。

  2. いずれかのビューを使用して収集データを分析します。

    • 呼び出しツリー : すべてのスレッドにおけるすべてのメソッド呼び出しを表示する「古典的な」呼び出しツリー。各最上位ノードは、特定のスレッドによって実行された最上位関数を表します。このビューを使用して、実際のアプリケーションアクティビティに素早くアクセスします。さらに学習したい方に

    • トップメソッド : アプリケーションのパフォーマンスを分析するときに開始するのに最適な場所です。実行時間が最も長い単純なメソッドのリストです。 Hide system functions トグルを使ってリストから除外することでシステム関数の「ノイズ」を減らすことができることに注意してください:有効にすると、メソッドの実行時間はメソッド自身の時間とすべての子システムメソッドの時間の合計として計算されます。スタック内のユーザーメソッド) さらに学習したい方に

  3. 疑わしい方法が見つかったら、F4 を押すか、コンテキストメニューからソースに移動を選択します。Riderはあなたをそのメソッドのソースコードへとナビゲートします。

最終更新日: 2020年7月6日

関連ページ:

実行/デバッグ構成を操作する

実行/デバッグ構成とビルド構成を混同しないでください。JetBrains Riderでコードを実行またはデバッグするには、実行/デバッグ構成を使用できます。各実行/デバッグ構成は、名前付きの実行/デバッグ起動プロパティのセットを表します。JetBrains Riderを使用して実行、デバッグ、または...

実行/デバッグ構成:.NET実行可能ファイル

実行/デバッグ構成とビルド構成を混同しないでください。この実行/デバッグ構成を使用して、.NETアプリケーションおよびプロセスを起動します。この種の構成は、実行するアプリケーションに特定のセットアップを行い、デバッガーをアタッチできます。また、複数の実行可能ファイルを一度に起動する必要がある場合は、...

実行/デバッグ構成:.NET起動設定プロファイル

実行/デバッグ構成とビルド構成を混同しないでください。この実行/デバッグ構成タイプは、launchSettings.jsonファイルで起動設定が構成されている.NET Core / ASP.NET Coreアプリケーションを実行およびデバッグできます。launchSettings.jsonとは何です...

実行/デバッグ構成:.NETプロジェクト

実行/デバッグ構成とビルド構成を混同しないでください。構成タブ:プロジェクト:この構成用のスタートアッププロジェクトを選択してください。ここで選択できるのは、実行可能タイプのプロジェクト(たとえば、コンソールアプリケーション)だけです。実行不可能なプロジェクト(クラスライブラリなど)を実行する場合は...

パフォーマンスプロファイラウィンドウ

このウィンドウでは、.NETアプリケーションのパフォーマンスのボトルネックをプロファイルして分析できます。パフォーマンスプロファイラは、次のもので構成されるマルチタブウィンドウです。収集されたスナップショットを開くために使用されるすべてのスナップショットタブ、プロファイリングセッションを制御するため...

APIによるセッションの制御

プロファイリングAPIには、プロファイリングプロセスを制御できる多数のクラスが用意されています。例:アプリケーションのコードから次のことができます。プロファイリングデータの収集を開始する:,、データ収集を停止する:,、データをディスクに保存する:,、その他、APIクラスの詳細については、API 参照...