.NET フレームワークを使い始めたばかりです。IDisposable
今日はインターフェースとメソッドを教わりましたdispose()
。私はそれに関していくつかのことを教えられました:
dispose()
オブジェクトに対応するクリーンアップ コードを含める必要があります (ファイルやデータベース接続など、オブジェクトによって占有されているリソースを閉じるなど)。
メソッドで実行しない場合はdispose()
、デストラクタで同じことを実行できますが、すぐに実行できるわけではなく、GC のなすがままに任せられるとも言われました。
また、クリーンアップ コードをまったく提供しない場合、GC は、オブジェクトが保持していたリソースへのすべての接続を強制的に終了します。したがって、クリーンアップ コードを自分で処理する必要があります。
しかし、CLR がこれを単独で処理しないのはなぜでしょうか? メモリ管理を処理し、ガベージ コレクションを処理します。したがって、どのオブジェクトがどのリソースを保持しているか、およびそのオブジェクトがいつ消滅するかをよく知っている必要があります。では、それらのリソースの割り当ても解除できるはずですか?
何人かに聞いてみました。私が与えられた答えは、GC が強制的に閉じるのに対し、適切に閉じる必要があるためであるというものでした。それは実際に理由ですか?