JetBrains Rider 2026.1 Help

破棄分析

コード内のリソースリークの数を減らし、パフォーマンスを向上させるには、使い捨てリソースを正しく処理する必要があります。 一方では、特定の API の呼び出しサイトで using キーワードを強制したいと考えていますが、他方では、 IDisposable の使用ごとに誤検知による大量のノイズが発生することは避けたいと考えています。

したがって、使い捨てリソースの処理を分析するために、JetBrains Rider は JetBrains.Annotations の一連のアノテーション属性に依存します。

分析を開始するには、重要な使い捨て API に [MustDisposeResource] 属性のアノテーションを付けます。 この属性を使用して、使い捨て型、そのコンストラクター、ファクトリメソッドにアノテーションを付けることができます。 これが完了すると、JetBrains Rider はリソースを使い捨てとして扱っていない呼び出しサイトを報告し、対応するクイックフィックスを提案します:

JetBrains Rider:Dispose 分析。 'using' ディレクティブを強制する

この警告は、使い捨てリソースを using でラップするか、そのリソースに対して明示的に Dispose() を呼び出すとすぐに消えます。

上のスクリーンショットの通り、 [MustDisposeResource] の使用箇所も対応する インレイヒント でマークされており、JetBrains Rider 設定 Ctrl+Alt+Sエディター | インレイヒント | C# | その他 ページで設定できます。

API が Dispose() メソッドを公開していない場合、または破棄を処理するメソッドがいくつかある場合は、実際にリソースを破棄するメソッドに [HandlesResourceDisposal] 属性のアノテーションを付けることができます。

[MustDisposeResource] public class HasNativeResources { // acquire disposable resources [HandlesResourceDisposal] public void Close() {/* process disposal */} } public class Test { public Test() { var resource = new HasNativeResources(); // no warning, because `Close()` handles the disposal resource.Close(); } }

カスタム破棄メソッドが引数として破棄可能なリソースを予期する場合、対応するパラメーターに [HandlesResourceDisposal] のアノテーションを付けることができます。

[MustDisposeResource] public class HasNativeResources : IDisposable { // some work with native resources public void Dispose() {/* process disposal */} } public static class ResourceHelpers { public static void Close([HandlesResourceDisposal] HasNativeResources res) { // handle disposal } } public class Test { public Test() { // no warning, because `Close()` handles the disposal var resource = new HasNativeResources(); ResourceHelpers.Close(resource); } }

最後に、アノテーション付きソースからリソースを取得するメソッドがリソースの破棄を処理せず、それを他の呼び出し元に返す場合、リソースが正しく処理されない可能性があるという問題が呼び出し元に引き継がれます。 これが意図的な場合は、メソッドに [MustDisposeResource] アノテーションを付けて、使い捨てリソースを処理する責任を呼び出し元に明示的に委譲することで、アナライザーにそのことを知らせることができます。

[MustDisposeResource] public class HasNativeResources : IDisposable { // some work with native resources public void Dispose() {/* process disposal */} } public class Sample { [MustDisposeResource] public HasNativeResources ProcessWithoutDisposing() { var resource = new HasNativeResources(); Console.WriteLine($"Logging resource: {resource}"); // no warning because the method is marked with [MustDisposeResource] return resource; } }

楽観的分析モードと悲観的分析モード

[MustDisposeResource] API からオブジェクトを受け取った場合、対応する変数を using でラップするか、あるいはその変数に Dispose() を明示的に呼び出した場合は、JetBrains Rider は常にそのオブジェクトが破棄済みとみなし警告を出しません。

代わりに使い捨て変数をメソッドの引数として渡すと、JetBrains Rider は分析モードに応じて警告を発行します:

  • 楽観的 (デフォルト): IDisposable またはその派生型を受け入れるすべてのメソッドは安全と見なされます。つまり、オブジェクト処理後に Dispose() が呼び出されると想定します。

  • 悲観的: メソッドは、 IDisposable を受け入れるパラメーターが [HandlesResourceDisposal] 属性でマークされている場合にのみ安全であるとみなされます。 それ以外の場合、JetBrains Rider は未破棄の変数を報告します。

エディター | インスペクション設定 ページで、JetBrains Rider 設定 Ctrl+Alt+S の解析モードを変更できます。

破棄分析用のコードインスペクション

破棄分析は次の コードインスペクション に依存します:

これらのインスペクションが エディター | インスペクション設定 | インスペクション重大度 ページの JetBrains Rider 設定 Ctrl+Alt+S で有効化されていることを確認してください。

分析を微調整するには、特定のインスペクションの 重大度レベルを変更したり 、無視すべき場所の一部のインスペクションを 抑制したりできます。

2026 年 6 月 12 日