ガベージコレクタがあるからリソースの開放は不要、という説は間違いです。 ガベージコレクタが開放できるのは、.NET FrameworkのランタイムであるCLRが管理しているものですが、.NET Frameworkの内部ではCLRが管理しないリソースも呼び出せるからです。 その他、ガベージコレクタが苦手とするパターンも多々存在するわけで・・・ リソースを任意の時点で開放したい場合、一般的にはDispose関数を使います。 以下がDisposeを実装する事が強制されるパターンの1例です。 (クラス内部で)ネイティブリソースを使っている マネージリソースのオブジェクト同士に依存関係がある(相互参照等も含む) オブジェクトの状態を不定にしておくことができない ファイナライザが別スレッドで動くことによる不都合を無視できない 1番目に該当するかの判断は難しいです。 .NET Frameworkのクラス