We recommend using Visual Studio 2017

CA2004: Remove calls to GC.KeepAlive


The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at CA2004: Remove calls to GC.KeepAlive.

|Breaking Change|Non-breaking|

Classes use SafeHandle but still contain calls to GC.KeepAlive.

If you are converting to SafeHandle usage, remove all calls to GC.KeepAlive (object). In this case, classes should not have to call GC.KeepAlive,assuming they do not have a finalizer but rely on SafeHandle to complete the OS handle for them. Although the cost of leaving in a call to GC.KeepAlive might be negligible as measured by performance, the perception that a call to GC.KeepAlive is either necessary or sufficient to solve a lifetime issue that might no longer exist makes the code harder to maintain.

Remove calls to GC.KeepAlive.

You can suppress this warning only if it is not technically correct to convert to SafeHandle usage in your class.