处置分析
为了减少代码中的资源泄漏并提高其性能,您需要确保正确处理可释放资源。 一方面,您希望在特定 API 的调用点强制使用 using 关键字,但另一方面,您又不希望每次使用 IDisposable 时出现大量误报。
因此,为了分析可释放资源的处理,ReSharper 依赖于来自 JetBrains.Annotations 的一组注解属性。
要开始分析,请使用 [MustDisposeResource] 属性注解您的关键可释放 API。 您可以使用此属性注解可释放类型、它们的构造函数和工厂方法。 完成此操作后,ReSharper 将报告未将资源视为可释放的调用点,并建议相应的快速修复:

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