破棄分析
コード内のリソースリークの数を減らし、パフォーマンスを向上させるには、使い捨てリソースを正しく処理する必要があります。 一方では、特定の API の呼び出しサイトで using キーワードを強制したいと考えていますが、他方では、 IDisposable の使用ごとに誤検知による大量のノイズが発生することは避けたいと考えています。
したがって、使い捨てリソースの処理を分析するために、JetBrains Rider は JetBrains.Annotations の一連のアノテーション属性に依存します。
分析を開始するには、重要な使い捨て API に [MustDisposeResource] 属性のアノテーションを付けます。 この属性を使用して、使い捨て型、そのコンストラクター、ファクトリメソッドにアノテーションを付けることができます。 これが完了すると、JetBrains Rider はリソースを使い捨てとして扱っていない呼び出しサイトを報告し、対応するクイックフィックスを提案します:

この警告は、使い捨てリソースを using でラップするか、そのリソースに対して明示的に Dispose() を呼び出すとすぐに消えます。
上のスクリーンショットの通り、 [MustDisposeResource] の使用箇所も対応する インレイヒント でマークされており、JetBrains Rider 設定 Ctrl+Alt+S の ページで設定できます。
API が Dispose() メソッドを公開していない場合、または破棄を処理するメソッドがいくつかある場合は、実際にリソースを破棄するメソッドに [HandlesResourceDisposal] 属性のアノテーションを付けることができます。
カスタム破棄メソッドが引数として破棄可能なリソースを予期する場合、対応するパラメーターに [HandlesResourceDisposal] のアノテーションを付けることができます。
最後に、アノテーション付きソースからリソースを取得するメソッドがリソースの破棄を処理せず、それを他の呼び出し元に返す場合、リソースが正しく処理されない可能性があるという問題が呼び出し元に引き継がれます。 これが意図的な場合は、メソッドに [MustDisposeResource] アノテーションを付けて、使い捨てリソースを処理する責任を呼び出し元に明示的に委譲することで、アナライザーにそのことを知らせることができます。
楽観的分析モードと悲観的分析モード
[MustDisposeResource] API からオブジェクトを受け取った場合、対応する変数を using でラップするか、あるいはその変数に Dispose() を明示的に呼び出した場合は、JetBrains Rider は常にそのオブジェクトが破棄済みとみなし警告を出しません。
代わりに使い捨て変数をメソッドの引数として渡すと、JetBrains Rider は分析モードに応じて警告を発行します:
楽観的 (デフォルト):
IDisposableまたはその派生型を受け入れるすべてのメソッドは安全と見なされます。つまり、オブジェクト処理後にDispose()が呼び出されると想定します。悲観的: メソッドは、
IDisposableを受け入れるパラメーターが [HandlesResourceDisposal] 属性でマークされている場合にのみ安全であるとみなされます。 それ以外の場合、JetBrains Rider は未破棄の変数を報告します。
ページで、JetBrains Rider 設定 Ctrl+Alt+S の解析モードを変更できます。
破棄分析用のコードインスペクション
破棄分析は次の コードインスペクション に依存します:
コードインスペクション:[MustDisposeResource] アノテーションが付与されたメソッドの戻り値が破棄されていません
コードインスペクション:戻り値は破棄する必要がありますが、メソッドまたは関数には [MustDisposeResource] が付けられていません
これらのインスペクションが ページの JetBrains Rider 設定 Ctrl+Alt+S で有効化されていることを確認してください。
分析を微調整するには、特定のインスペクションの 重大度レベルを変更したり 、無視すべき場所の一部のインスペクションを 抑制したりできます。