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

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