CodeQL 文档

本地 IDisposable 上缺少 Dispose 调用

ID: cs/local-not-disposed
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - efficiency
   - maintainability
   - external/cwe/cwe-404
   - external/cwe/cwe-459
   - external/cwe/cwe-460
Query suites:
   - csharp-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

类型实现 IDisposable 的对象应通过调用 Dispose 进行释放。

建议

如果可能,请在 using 块中包装对象的分配,以便在 using 块完成后自动释放对象。

如果无法做到这一点,请确保在对象上调用 Dispose。通常建议在 finally 块中调用 Dispose,以确保即使抛出异常也能释放对象。

示例

在此示例中,创建了 FileStream,但未对其进行释放。

using System;
using System.IO;

class Bad
{
    long GetLength(string file)
    {
        var stream = new FileStream(file, FileMode.Open);
        return stream.Length;
    }
}

在修改后的示例中,使用了 using 语句来确保正确关闭文件流。

using System;
using System.IO;

class Good
{
    long GetLength(string file)
    {
        using (var stream = new FileStream(file, FileMode.Open))
            return stream.Length;
    }
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私