動的プログラム分析 (DPA)
Dynamic Program Analysis(または DPA)は、ReSharper のバックグラウンドで実行され、以下に関連するさまざまな問題についてアプリケーションをチェックするプロセスです:
メモリの割り当て – 大きなオブジェクトヒープと小さなオブジェクトヒープ (LOH と SOH) へのクロージャと割り当て。
データベースの使用 – 長いコマンド実行時間、多数の開いている接続など。
ASP Web アプリケーション - 要求処理時間が長い、開いている接続の数が多い、など。
DPA は ReSharper でソリューションを実行するたびに自動で開始されます。 データはほとんどオーバーヘッドなしで収集されます。DPA をさまざまな実際のソリューションでテストしたところ、遅延は 0 〜 2% でした。
DPA を簡単に理解するには、常にオンになっているプロファイリングのようなものと考えてください。プロファイラーを実行したり、プロファイリングセッションを開始したり、スナップショットを取得したりする必要はありません。 普段どおり作業するだけで、ソリューションを実行するときにすべてのデータがバックグラウンドで収集されます。

詳細は DPA の概要を参照してください。
サポートされている OS とフレームワーク
OS | フレームワーク |
|---|---|
Windows | .NET フレームワーク、.NET コア、.NET |
Linux, macOS | .NET Core 3.0 以降、.NET 5.0 以降 |
前提条件
DPA は、Windows 用のイベントトレース(ETW)に基づいています。 ETW イベントを受信するために、DPA はシステムにインストールする必要がある特別な「JetBrains ETW ホストサービス」を使用します。 通常、このサービスは ReSharper のインストールと一緒にインストールします。 サービスがインストールされていない場合、DPA は非アクティブになります。
この場合、Visual Studio 内から DPA を有効にできます。 これを行うには、 動的プログラム分析 ツールウィンドウ( )を開きます。 ツールウィンドウで、 「ETW ホストサービス」を一度実行する リンクをクリックします。 ReSharper は、インストールせずにサービスを開始します。 システムが再起動するまで、サービスは機能することに注意してください。
DPA を使ってみる
実際、DPA の使用を開始するためにユーザー側で追加の手順は必要ありません。 ワークフローにいくつかの小さな追加を行うだけで、通常どおりに作業できます。
プロジェクトの実行またはデバッグを終了するたびに、ステータスバーの DPA アイコンに注意してください。 このように赤い場合は
、それをクリックして 問題を表示 を選択します。問題のリストを確認します。 このステップでは、次のことができます。
問題が解決できると思われる場合は、 メモリ割り当ての問題、 データベースの問題 、および ASP の問題に関するヒントを使用して問題を解決してみてください。
問題を修正した後、プロジェクトをもう一度実行し、DPA リストに表示されていないことを確認します。
問題を修正できないと思われる場合は、 この問題を抑制するか除外してください。 問題をリストから消すもう 1 つの方法は、 問題のしきい値を上げることです。
理想的には、次のような緑色の DPA アイコンが表示されるはずです:
。
DPA の仕組み
実行中にプログラムが 指定されたしきい値 (たとえば、割り当てられたメモリのサイズ) を超えた場合、割り当てが行われる方法が問題と見なされます。 DPA は、このメソッドを 動的プログラム分析 ウィンドウの問題のリストに追加します。

割り当てを担当するコードの正確な行がエディターでハイライトされます。

呼び出しパス上のすべてのメソッドと行もハイライトされます。

問題としてマークされているメソッドのコードを変更した場合、DPA はこれを問題を修正するための試みと見なします。
修正後に問題の値がしきい値を下回った場合、DPA は問題が修正されたと見なし、リストから削除します。
修正後、問題の値がまだしきい値を超えている場合、DPA はリスト内の問題をこの新しい値で更新します。
問題としてマークされたメソッドのコードを変更しない場合、DPA は新しい問題の値とすべての実行の中で最も高い問題の値を表示します。

詳細に説明すると、各問題について DPA は最大記録値と最後の実行時の値の 2 つの値を保存します。 これにより、誤検出 – 問題がしきい値を下回ってリストから消えるのは、修正されたためではなく、起動条件が変わったため(プログラムの実行時間が短かった、必要な機能が実行されなかったなど)の場合があります。 最大値は、複数回の実行間で問題に関連するコードを変更していない場合にのみ表示されます。
DPA は、 ミュートおよび抑制された問題をリストに表示せず、対応するコードをエディターでハイライトしません。
現在、問題の全履歴を表示することはできません。
デバッグ ビルドと リリース ビルドは互いに異なるため、DPA は各ソリューションビルド構成を個別に追跡します。 動的プログラム分析 ウィンドウには、現在選択されているビルド構成の問題が表示されます。

ETW は、 100 KB の割り当てしきい値を超えた後にのみメモリ割り当てイベントを発生させます。 メモリ割り当ての問題に対する DPA の粒度レベルは 100 KB です。
DPA をオフにする
システムで 「JetBrains ETW ホストサービス」が実行されている場合、DPA はデフォルトでオンになっています。 DPA を無効にするには、ステータスバーの DPA アイコン(
または
)をクリックして、 動的プログラム分析を無効にする を選択します。