リソースの管理
更新 : 2007 年 11 月
すべてのオブジェクトは、メモリ、ファイル ハンドル、データベース接続などのシステム リソースを使用します。リソースは、共通言語ランタイム (CLR: Common Language Runtime) によって自動的に管理されるため、通常は不要なオブジェクトの解放について気にする必要はありません。しかし、リソースがどのように管理されているのかを理解しておくと、より効率的なアプリケーションをデザインできるようになります。
ガベージ コレクション
CLR は、ガベージ コレクションというシステムを使って、割り当てられたリソースを管理します。システムのガベージ コレクタは、既にアプリケーションの実行中のコードから利用できなくなったオブジェクトのリソースを解放します。ガベージ コレクションのアルゴリズムは非決定的なので、CLR がオブジェクトのリソースをいつ解放するかは不明確です。以降では、Visual Basic におけるリソースの管理方法の変更点をいくつか説明します。
Nothing へのオブジェクトの割り当て
Nothing は、Visual Basic でオブジェクト変数がオブジェクトへの参照を含んでいないことを示すために使用されるキーワードです。以前のバージョンの Visual Basic では、使わないオブジェクトを Nothing に割り当てることによって、オブジェクト変数をオブジェクトから切り離し、リソースを解放していました。現在の Visual Basic でも、使わないオブジェクトを Nothing に割り当てることはできますが、リソースの管理方法が変更されているため、オブジェクトがすぐに解放されるとは限りません。一般に、オブジェクトを Nothing に割り当てる必要があるのは、共有メンバやグローバル変数などの寿命の長いオブジェクトの場合だけです。
破棄
一部のオブジェクトは、Dispose というメソッドをサポートしています。このメソッドを使用すると、システム リソースをより迅速に解放できます。Dispose メソッドをサポートするクラスは、IDisposable インターフェイスを実装する必要があります。Dispose メソッドは、オブジェクトのリソースを解放する時に明示的に呼び出します。たとえば、次のようにします。
ThisObject.Dispose()
Finalize
この他に、Finalize メソッドをサポートしているクラスもあります。このメソッドは、オブジェクトが解放されるときに自動的に実行されるので、これを使ってその他のクリーンアップ タスクを実行できます。Finalize メソッドは、以前のバージョンの Visual Basic で使用されていた Class_Terminate() メソッドに似ています。オブジェクトがアクセス不能になると、CLR は最終的に、そのオブジェクトの Finalize メソッドを呼び出します。ガベージ コレクションのアルゴリズムは非決定的なので、Finalize メソッドは直ちに呼び出されることもあれば、数時間後に呼び出されることもあります。