DPA スコープを絞り込む
特定の問題を DPA 問題リストから除外したい場合が数多くあります。
主なものは次のとおりです。
- これは問題ではありません
すべてが意図したとおりに動作するにもかかわらず、DPA が特定のメソッドを問題としてマークする場合があります。例: メソッドが大量のメモリを割り当てる場合があります。これはコード設計が間違っているためではなく、単に現在のユースケースで必要なためです。これらがほんの数個の方法である場合、最善の解決策は、これらの問題を抑制することです。誤検知が多数発生する場合は、おそらく問題のしきい値を増やす方がよいでしょう。
- このコードの所有者ではないか、今すぐ分析することに興味がありません
大規模なソリューションには、多くの人々が同時に取り組んでいる何百ものプロジェクトが含まれます。DPA を使用すると、ソリューションの特定の部分を分析から除外できるため、現在の作業に関連する問題のみを残すことができます。
- この問題はすでに修正されています
すでに問題を修正しているが、ソリューションをもう一度実行 / デバッグしていないまれなケース。このような問題をリストから非表示にする場合は、問題を修正済みとしてマークできます。
簡単な要約:
VCS を介して共有 | まで問題を非表示にします | 粒度 | |
|---|---|---|---|
はい | 恒久的に | メソッド | |
いいえ | 恒久的に | プロセス、モジュール、クラス、メソッド | |
いいえ | 次の実行まで | メソッド | |
いいえ | 恒久的に | ソリューション |
問題を抑制する
問題を抑制するには、対応するメソッドに SuppressMessage 属性をマークする必要があります。この問題を抑制する主な利点は、属性がソースコードに設定されているため、VCS を介して共有できることです。属性を設定する最も簡単な方法は、コンテキストアクションを使用することです。
エディターで、抑制したいメソッドを見つけます。
SuppressMessage属性により、DPA は、メソッド自体だけでなく、すべての子呼び出しでもメモリ割り当てを無視することに注意してください。DPA でハイライトされた行にキャレットを置き、Alt+Enter を押します。
コンテキストアクションリストで、{ メモリ割り当てを抑制 | データベース } の問題を選択してから、現在の呼び出しサブツリーで抑制したいものを正確に選択します。選択した問題のみ、このタイプのすべての問題、すべての問題です。

SuppressMessage 属性は手動で設定できます。例:
ここに:
"ReSharper.DPA"は必須の属性カテゴリです。checkIdは、どの問題タイプを抑制する必要があるかを指定します(説明はオプションです)。"DPA0001: Memory allocation issues": メモリ割り当ての問題。"DPA0002: Excessive memory allocations in SOH": スモールオブジェクトヒープへの割り当て。"DPA0003: Excessive memory allocations in LOH": ラージオブジェクトヒープへの割り当て。"DPA0004: Closure object allocation": 閉鎖のための割り当て。"DPA0005: Database issues": データベースの問題。"DPA0006: Large number of DB commands": 多数のデータベースコマンドの実行。"DPA0007: Large number of DB records": データベースレスポンス内の多数のレコード。"DPA0008: Large number of DB connections": 多数の同時データベース接続。"DPA0009: High execution time of DB command": コマンド実行時間が長い。
MessageIdを使用すると、発行値によって属性の範囲を絞り込むことができます。キーと値のペアのリストを使用してスコープフィルターを設定する必要があります。"key1: value1; key2: value2; ..."次のキーを使用できます。type: EXACT_FQN: 指定されたタイプのオブジェクトが割り当てられる割り当ての問題を抑制します。EXACT_FQNは、名前空間とジェネリクス型のすべての置換を含む型の完全な名前です。size: VALUE "B"|"KB"|"MB"|"GB"|"TB": 割り当てられたオブジェクトの合計サイズがVALUEより小さい場合、割り当ての問題を抑制します。count: オブジェクト (コマンド、レコード、接続) の総数がVALUE未満の場合、データベースの問題を抑制します。time: ミリ秒単位の時間がVALUEより小さい場合、データベースコマンドの実行時間の問題を抑制します。
次に例を示します:
"type: System.Object; type: System.String; size: 500MB"このフィルターは、割り当てられたオブジェクトの合計サイズが 500MB 未満でない限り、DPA が
System.ObjectまたはSystem.Stringタイプのオブジェクトの割り当てに関連するすべての問題を抑制しなければならないことを意味します。
分析からコードを除外する
コードの特定の部分の分析に関心がない場合、たとえば、現在の作業に関連していない場合は、除外が必要になることがあります。特定のプロセス、モジュール、クラス、メソッドを除外できます。関連する問題は、動的プログラム分析ウィンドウおよびエディターから非表示になります。自分だけのコードを除外することに注意してください。除外された問題は VCS に伝播されません。
動的プログラム分析からコードを除外する
を開きます。
フィルターで、必要なフィルター規則の横にある
追加 ... をクリックします。コードのみを分析する : 動的分析に含めるプロセス、モジュール、クラス、/ またはメソッドを指定します。他のすべてのコード項目は除外されます。コードアイテムは、互いに独立してフィルタリングされます。例: メソッドを指定し、モジュールとクラスにアスタリスク
*を残して、すべてのモジュールとすべてのクラスから指定された名前のメソッドのみを含めることができます。コードを分析しない : 動的分析から除外するプロセス、モジュール、クラス、/ またはメソッドを指定します。コードアイテムは、互いに独立してフィルタリングされます。
問題を修正済みとしてマーク
問題を修正済みとしてマークすることは、除外することと似ています。主な違いは、「修正済みとしてマーク」がソリューションを実行 / デバッグするまで問題を非表示にしている間、除外は永続的であるということです。問題が実際に修正されていない場合、DPA は問題を問題リストに戻します。
動的プログラム分析ウィンドウを開きます。
問題を選択し、Delete を押すか、コンテキストメニューで無視 | 修正済みとしてマークを選択します。
問題のしきい値を変更する
DPA は、インスペクション値がしきい値を超えた場合にのみ、メソッドを問題としてマークします。例: 実行中、しきい値が 50 MB であるのに対し、メソッドは LOH 55 MB に割り当てられます。誤検知を排除する最も簡単な方法は、対応するしきい値を増やすことです。普遍的なしきい値はないことに注意してください。現在の実行コンテキストに応じて、アプリケーションは異なる量のメモリを割り当てることができます。たとえば、アプリが扱うデータのサイズは実行ごとに変化する可能性があります。
動的プログラム分析ウィンドウのしきい値タブで、各発行タイプのしきい値を設定できます。デフォルトのしきい値は次のとおりです。
Closure オブジェクト: 50 MB
ラージオブジェクトヒープ: 50 MB
小さなオブジェクトのヒープ: 100 MB
DB コマンド時間: 500 ミリ秒
DB 接続: 10
DB コマンド: 50
DB レコード: 100
MVC アクション: 500ms
Razor ページハンドラー: 500 ミリ秒
Razor ビューコンポーネント: 300 ミリ秒
動的プログラム分析ウィンドウを開きます。
以下のいずれか 1 つを実行します:
現在のしきい値を超えている問題を選択し、コンテキストメニューで無視 | 新しいしきい値を設定 ... を選択します。これにより、問題の割り当て値のすぐ上に対応するしきい値が設定されます。
しきい値タブに切り替えて、目的の問題タイプの新しいしきい値を設定します。
関連ページ:
問題のある基本的な操作
プロジェクトを実行またはデバッグした後、DPA は見つかった問題のリストを動的プログラム分析ウィンドウに表示します。問題リストを開く:見つかった問題のリストを開くには、次のいずれかを実行します。メニューを使用してください。ステータスバーの DPA アイコンをクリックし、問題を表示を選択します。問題の詳細を表示:問題の詳細を表示するには、問題リストで問題を選択します。詳細は右側に表示されます。DPA によって表示されるデータの詳細については、DPA の仕組みを参照してください。検索とフィルタリ...
デバッグ中の DPA
デバッグとメモリ割り当て分析:デバッグ中、アプリケーションで使用されるシステムアセンブリはデバッガーに追加データを提供します。その結果、これらのアセンブリは、通常のアプリケーション実行に比べて多くのメモリを割り当てます。現在、DPA はこれらの追加割り当てとプログラムによる通常の割り当てを区別できません。これにより、DPA によってメモリ割り当ての問題が誤検出される可能性があります。このため、ソリューションをデバッグするときにメモリ割り当て分析を無効にする必要がある場合があります。これを行うに...