IDisposableインターフェイスを実装する場合、仮にIDisposable.Disposeメソッドの呼び出しが行われなかった場合でもリソースが解放されるように、ファイナライザを実装して解放処理が呼び出されるようにすることができます。 (関連:§.ファイナライザ、§.ファイナライザとIDisposableのデザインパターン (disposeパターン))
一方で、IDisposable.Disposeメソッドで明示的にリソースが破棄された場合、Disposeメソッドが呼び出されなかった場合の保証としてのファイナライザ呼び出しは不要となります。 そのような場合は、GC.SuppressFinalizeメソッドを呼び出すことで、オブジェクトのファイナライザ呼び出しを抑止することができます。
GC.SuppressFinalizeは、ガベージコレクタ(GC)に対してオブジェクトのファイナライザ呼び出しが不要であることを通知します。 ガベージコレクタは、これに基づいてガベージコレクションの際のファイナライザ呼び出しを行わなくなります。
.NET Core/.NET 5以降では、.NETランタイムのシャットダウン時(≒.NETプロセスの終了時)におけるファイナライザ呼び出しは行われません。 このため、上記の実装では、必ずしもファイナライザによってアンマネージリソースが解放されるとは限りません。 詳しくは§.シャットダウン時におけるファイナライザ呼び出しを参照してください。