CA2004:移除对 GC.KeepAlive 的调用

类型名

RemoveCallsToGCKeepAlive

CheckId

CA2004

类别

Microsoft.Reliability

是否重大更改

非重大更改

原因

类使用 SafeHandle,但是仍包含对 GC.KeepAlive 的调用。

规则说明

如果要转换为 SafeHandle 使用率,请移除所有对 GC.KeepAlive (对象)的调用。 在这种情况下,类不必调用 GC.KeepAlive, 假定它们没有终结器,但是依赖 SafeHandle 来为它们完成 OS 句柄。 尽管从性能上来讲,保留对 GC.KeepAlive 的调用的成本可以忽略不计,但是,认为调用 GC.KeepAlive 是解决也许已不再存在的生存期问题的必要条件或充分条件,会使代码更难以维护。

如何解决冲突

移除对 GC.KeepAlive 的调用。

何时禁止显示警告

只有当转换为在类中使用 SafeHandle 在技术上不正确时,才可以禁止显示此警告。