dotMemory 2026.1 Help

API を使用したプロファイリングセッションの制御

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

  • メモリのスナップショットを取得: MemoryProfiler.GetSnapshot(string name),

  • メモリ割り当てデータの収集を有効または無効にします: MemoryProfiler.CollectAllocations(bool enable),

  • ガベージコレクションを強制する: MemoryProfiler.ForceGc(),

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

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

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

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

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

主な概念

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

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

  • API を有効にするには、プロファイラーオプションで有効な プロファイリングを制御する方法 | API の使用 パラメーターを使用してプロファイリングセッションを開始する必要があります。

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

  • プロファイリングなしでアプリケーションを実行すると、API メソッドの呼び出しは無視されます。 API はエラーをスローしません。

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

  • メモリスナップショットを取得してディスクに保存するには、 MemoryProfiler.GetSnapshot(string name) を呼び出します。これは、プロファイリングコントローラーの スナップショットを取得 ボタンを押すのと同じです。

  • メモリの割り当てデータの収集を有効化または無効化するには、 CollectAllocations(bool enable) を呼び出します。これは、 割り当てを収集する ボタンを押すのと同じです。

  • CollectAllocations(bool enable) 呼び出しが有効になるかどうかを確認するには、 MemoryProfiler.GetFeatures() を使用します。 このチェックは必須ではありません。

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

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

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

    private void SomeMethod() { // Enable collecting memory allocation data MemoryProfiler.CollectAllocations(true); ...// Here goes some code that I want to profile // Get a snapshot MemoryProfiler.GetSnapshot("my snapshot"); }
  3. dotMemory からアプリケーションのプロファイリングを開始し、 プロファイラーオプションプロファイリングを制御する方法 | API の使用 パラメーターを選択します。

自己プロファイルアプリケーションを作成する

名前が示すように、このシナリオでは、アプリケーションが自身をプロファイルします。 前のシナリオとの主な違いは、プロファイリングを開始する方法です。 プロファイリング APIを使用してコードの特定部分をプロファイルする場合は、セッションを手動で開始します (例えば、dotMemory UI を使用)。 自己プロファイルされたアプリケーションの場合、セッションはアプリケーションコードから直接開始されます。

主な概念

  • 自己プロファイル API は、プロジェクトで参照する必要がある別個の JetBrains.Profiler.SelfApi(英語) NuGet パッケージです。

  • プロファイリングセッションを制御するために、API は dotMemory.exe コマンドラインツールを使用します。

  • dotMemory.exe ツールはパッケージの一部ではありません。 DotMemory.Init() メソッドを使用して API を初期化すると、API は JetBrains.dotMemory.Console(英語) NuGet パッケージの最新バージョンをダウンロードします。

  • デフォルトでは、パッケージのツールは %LOCALAPPDATA%\JetBrains\Profiler フォルダーに保存されます。 別の場所を指定するには、 DotMemory.Init() メソッドの downloadTo 引数を使用します。

  • dotMemory.exe ツールを含むパッケージがすでに存在する場合、新しいパッケージはダウンロードされません。

  • 単一のスナップショットを取得するには、 DotMemory.GetSnapshotOnce() メソッドを使用します。

  • 複数のスナップショットを取得するには、次のことを行う必要があります。

  • たとえば、保存されたスナップショットのパスを指定するなど、プロファイリングセッションを構成するには、 DotMemory.Config クラスのインスタンスを使用する必要があります。

  • セルフプロファイリング API は、 プロファイリング API と同時に使用できます。

  • 結果の自己プロファイルスナップショットには、 .dmw ファイル拡張子が付いています(実際には dotMemory ワークスペースです)。

アプリケーションに自己プロファイリングを追加するには

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

  2. DotMemory.Init() メソッドを呼び出して、自己プロファイル API を初期化します。 API が dotMemory.exe コマンドラインツールをダウンロードする必要があるため、最初の初期化には時間がかかることに注意してください。 ダウンロードプロセスを追跡し、それをキャンセルする機能がある場合は、 DotMemory.InitAsync() メソッドを直接使用します。 CancellationToken を使用し、コールバック変数を使用して進行状況を追跡できます。

  3. ユースケースの必要に応じて API 呼び出しを追加します。

    • スナップショットが必要な場合:

      static void Main(string[] args) { ... // Here goes some init code // Initialize the API and download dotMemory.exe (if needed) DotMemory.Init(); SomeMethod(); } private void SomeMethod() { ... // Here goes some code that I want to profile // Get a snapshot and save it to Temp var config = new DotMemory.Config(); config.SaveToDir("C:\\Temp\\Workspace"); DotMemory.GetSnapshotOnce(config); }
    • スナップショットが複数必要な場合:

      static void Main(string[] args) { ... // Here goes some init code // Initialize the API and download dotMemory.exe (if needed) DotMemory.Init(); // create profiling config and attach to the current process var config = new DotMemory.Config(); config.SaveToDir("C:\\Temp\\Workspace"); DotMemory.Attach(config); SomeMethod(collection); // Detach from the current process DotMemory.Detach(); } private void SomeMethod(IEnumerable<String> collection) { foreach (var item in collection) { ... // Here goes some code that I want to profile // Get a snapshot DotMemory.GetSnapshot("my snapshot"); } }
2026 年 6 月 12 日