dotTrace 2019.1ヘルプ

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

プロファイリングAPI(英語)は、プロファイリングプロセスを制御することを可能にするいくつかのクラスを提供します。例:アプリケーションのコードから直接、次のことができます。

  • プロファイリングデータの収集を開始する: MeasureProfiler.StartCollectingData() ,

  • データ収集を停止する: MeasureProfiler.StopCollectingData() ,

  • データをディスクに保存する: MeasureProfiler.SaveData() ,

  • その他

APIクラスの詳細については、API 参照を参照してください。

プロファイリングAPIを使用する必要がある主なシナリオは2つあります。

コードの特定部分のプロファイリング

APIを使用すると、分析範囲を絞り込み、関心のあるコードのみをプロファイルすることができます。たとえば、適切なタイミングでスナップショットを取得するボタンをクリックするのはそれほど簡単ではありません。プロファイリングAPIを使用すると、コードの正確な時点で「スナップショットを取得する」呼び出しを実行できます。

dotTrace 2018.3以前は他のバージョンのプロファイリングAPIを使用していました(このAPIの詳細については、dotTrace 2018.3のドキュメントを参照してください)。このAPIはまだサポートされていますが、このセクションで説明されている最新のAPIバージョンを使用することを強くお勧めします。

主な概念

  • APIのソースコードはGitHub(英語)で入手できます。コードはApacheライセンスで配布されています。

  • プロファイリングAPIは、プロジェクトで参照する必要があるJetBrains.Profiler.API(英語) NuGetパッケージとして配布されています。

  • APIを有効にするには、プロファイラAPIを使用するオプションを有効にしてプロファイリングセッションを開始する必要があります。それは高度なプロファイラオプションにあります。

  • APIを使用する場合、通常のプロファイリングセッションと比較した場合の唯一の違いは、セッションの制御方法です。プロファイリングコントローラーのボタンをクリックする代わりに、対応するAPIメソッドを呼び出します。

  • プロファイリングを無効にしてアプリケーションを実行した場合、APIメソッドの呼び出しは単に無視されます。APIはエラーをスローしません。

  • プロファイリングセッションを制御するために使用する必要がある主なクラスは MeasureProfiler 静的クラスです。

  • プロファイリングデータの収集を開始するには、MeasureProfiler.StartCollectingData()を呼び出します。これは、プロファイリングコントローラーの開始ボタンを押すのと同じです。

  • データの収集を中止してディスクに保存するには、MeasureProfiler.SaveData() を呼び出します。これは、スナップショットを取得して待機するボタンを押すのと同じことです。

  • 保存せずにデータを削除するには、MeasureProfiler.DropData() を呼び出します。これは、ドロップボタンを押すのと同じです。

  • データをディスクに保存せずにプロファイリングデータの収集を中止するには、MeasureProfiler.StopCollectingData()を呼び出します。通常、この方法を使用する必要はありません。この方法はタイムラインプロファイリングタイプには適用されず、プロファイラによって無視されることに注意してください。

  • タイムラインプロファイリングでは、ETWサービスをバックグラウンドで実行する必要があります。このサービスを開始するには、管理者権限が必要です。このため、プロファイリングセッションを開始するたびに、dotTraceは権利の昇格を要求します。これを回避するには、<dotTrace_installation_directory>\x64\JetBrains.ETW.Collector.Host.exe ファイルを使用して手動でサービスを実行してください。もう1つの選択肢は、<dotTrace_installation_directory>\Msi.x64\EtwService.msi インストールファイルを使用してサービスをインストールすることです。この場合、サービスはWindowsの起動時に実行されます。

コードの特定部分のプロファイリングにAPIを使用するには

  1. プロジェクトで JetBrains.Profiler.API NuGetパッケージを参照してください。

  2. ユースケースに応じて、MeasureProfiler クラスのメソッドへの呼び出しをコードに挿入します: たとえば:

    private void SomeMethod() { MeasureProfiler.StartCollectingData(); ... // Here goes some code that I want to profile MeasureProfiler.SaveData(); }

  3. dotTrace、JetBrains Rider、またはVisual Studio内からアプリケーションのプロファイリングを開始し、プロファイラーオプションプロファイラAPIを使用するチェックボックスを選択します : *

自己プロファイルアプリケーション

名前が示すように、このシナリオでは、アプリケーションはそれ自体をプロファイルします。例:ReSharperはこのAPIを使用して、エンドユーザーのデスクトップでの動作に関する統計情報を収集します。ユーザーがパフォーマンスやメモリの問題に直面した場合、サポートチームはユーザーにReSharperを特別なオプション(自己プロファイリング機能を有効にする)で実行して問題を再現するように依頼します。収集されたスナップショットは開発チームに送信されます。

主な概念

  • 自己プロファイリングAPIは、JetBrainsWebサイト(英語)からダウンロードできるzipアーカイブとして配布されています。

  • 自己プロファイリングAPIは、.NET Coreアプリケーションをサポートしません。

  • エンドユーザーはdotTraceをインストールしていません。dotTrace再配布可能ファイルをアプリケーションのインストールパッケージに含める必要があります。

  • エンドユーザーはプロファイリングを開始することは想定されていないため、自己プロファイリングセッションがAPIによって開始されます。この目的のために、APIは JetBrains.Profiler.Windows.SelfApi.dll ライブラリーにある静的 SelfAttach クラスを使用します。

  • Attach() メソッドはプロファイリング設定を準備し、'redistributables' フォルダーからプロファイラを実行します。

  • プロファイリングの設定は、Attach メソッドに渡される2つのクラス( BaseSnapshotProfilingConfig BaseProfilingConfig クラスからインスタンス化される)のいずれかによって定義されます。

    • SaveSnapshotProfilingConfig - 作成されたスナップショットは指定のフォルダーに保存されます。

    • ExecutableSnapshotProfilingConfig - 作成されたスナップショットは指定またはデフォルトのフォルダーに保存され、スナップショットへのパスはコマンドラインパラメータとして外部アプリケーションに渡されます。

  • 自己プロファイリングAPIは、トレースおよび1行ずつ プロファイリングタイプをサポートしません。

自己プロファイルアプリケーションでAPIを使用するには

  1. プロファイリングSDK(英語)をダウンロードして解凍します。インターネットからダウンロードしたファイルを安全でないものとして扱うことをドメインポリシーとしている場合は、ファイルのプロパティーでブロック解除するボタンを使用してzipアーカイブのブロックを解除します。

  2. SDKのメインディレクトリーにある JetBrains.Profiler.Windows.SelfApi.dll ファイルから JetBrains.Profiler.Windows.SelfApi アセンブリを参照します。

  3. SDKの再配布可能ファイルをアプリケーションに提供します。

  4. SelfAttach クラスを使用してアプリのどこかで自己プロファイリングを開始します: たとえば:

    SelfAttach.Attach(new SaveSnapshotProfilingConfig() { ProfilingControlKind = ProfilingControlKind.Api, SaveDir = "C:\\Temp", RedistDir = "C:\\ProfilerSDK", ProfilingType = ProfilingType.Performance, ListFile = "C:\\snapshot_list.xml" // the file is created automatically during profiling });

  5. ユースケースの要求に応じて、プロファイリングAPIへの呼び出しをコードに挿入します。自己プロファイリングの初期化の直後にプロファイリングを開始する場合は、少し待ちます( SelfAttach APIの起動にはしばらく時間がかかります)。

    // wait until API starts while (SelfAttach.State != SelfApiState.Active) Thread.Sleep(250); MeasureProfiler.StartCollectingData(); ... // Here goes some code that I want to profile MeasureProfiler.SaveData();

最終更新日: 2019年4月30日

関連事項

リファレンス: