处置分析
为了减少代码中的资源泄漏并提高其性能,您需要确保正确处理可释放资源。 On the one hand, you want to enforce the using keyword at call sites of the specific APIs, but on the other hand, you do not want to have a lot of noise with false positives around each usage of IDisposable.
因此,为了分析可释放资源的处理,ReSharper 依赖于来自 JetBrains.Annotations 的一组注解属性。
要开始分析,请使用 [MustDisposeResource] 属性注解您的关键可释放 API。 您可以使用此属性注解可释放类型、它们的构造函数和工厂方法。 完成此操作后,ReSharper 将报告未将资源视为可释放的调用点,并建议相应的快速修复:

当您将可释放资源包装在 using 中或显式调用该资源上的 Dispose() 时,警告将消失。
正如上方截图所示, [MustDisposeResource] 的使用也会标记为相应的 内嵌提示 ,这些提示可以在 ReSharper 选项 的 页面上进行配置
Alt+R, O
。
如果您的 API 未公开 Dispose() 方法或有多个处理释放的相关方法,您可以使用 [HandlesResourceDisposal] 属性注解那些实际释放资源的方法:
如果自定义释放方法需要一个可释放资源作为参数,您可以使用 [HandlesResourceDisposal] 注解相应的参数:
最后,如果从注解的来源获取资源的方法未处理资源释放,而是将其返回给其他调用者,则潜在的资源处理不当问题将传递给调用者。 如果这是有意为之,您可以通过使用 [MustDisposeResource] 注解该方法,让分析器明确将处理可释放资源的责任委托给调用者:
乐观和悲观分析模式
When you receive an object by using a [MustDisposeResource] API, ReSharper will always consider it disposed and issue no warnings if you wrap the corresponding variable in a using or if you explicitly call Dispose() on that variable.
如果您将可释放变量作为参数传递给方法,ReSharper 将根据分析模式发出警告:
乐观 (默认):所有接受
IDisposable或派生类型的方法都被认为是安全的;也就是说,我们假设它们会在处理对象后调用Dispose()。悲观 :只有当接受
IDisposable的参数被标记为 [HandlesResourceDisposal] 属性时,方法才被认为是安全的。 否则,ReSharper 将报告未释放的变量。
您可以在 ReSharper 选项 的 页面上更改分析模式 Alt+R, O 。
释放分析的代码检查
释放分析依赖于以下 代码检查:
请确保这些检查已在 ReSharper 选项 的 页面上启用 Alt+R, O 。
为了微调分析,您可以 更改特定检查的严重性级别 或 在应忽略的地方抑制 某些检查。