See Also: UseSuppressFinalizeOnIDisposableTypeWithFinalizerRule Members
Example
class BadClass : IDisposable { ~BadClass () { Dispose (false); } public void Dispose () { // GC.SuppressFinalize is missing so the finalizer will be called // which puts needless extra pressure on the garbage collector. Dispose (true); } private void Dispose (bool disposing) { if (ptr != IntPtr.Zero) { Free (ptr); ptr = IntPtr.Zero; } } [DllImport ("somelib")] private static extern void Free (IntPtr ptr); private IntPtr ptr; }
Example
class GoodClass : IDisposable { ~GoodClass () { Dispose (false); } public void Dispose () { Dispose (true); GC.SuppressFinalize (this); } private void Dispose (bool disposing) { if (ptr != IntPtr.Zero) { Free (ptr); ptr = IntPtr.Zero; } } [DllImport ("somelib")] private static extern void Free (IntPtr ptr); private IntPtr ptr; }