C#のガベージコレクションとは、使われていないオブジェクトが使っているメモリを自動的に解放して、メモリの容量を節約する機能です。
わざわざ使われていないオブジェクト1つ1つに手動でメモリを解放する設定する必要がないのでとても便利です。
new演算子を使うとメモリの領域を使いオブジェクトを作成します。
どんどんオブジェクトを作成し、メモリ領域がなくなってしまうと、new演算子を使ってオブジェクトを作成しようとしても失敗してしまいます。
それをなるべく回避するための機能になります。
ガベージコレクションが実行される手順
初めにnew演算子でオブジェクトを作成するとメモリが確保され、コンストラクターが実行されます。
オブジェクトがデストラクター以外の方法でアクセスできなくなると、使われていないとみなされて破壊される対象になります。
※デストラクターとはガベージコレクションでオブジェクトが破壊される直前に呼び出されるメソッドです。
オブジェクトが破壊対象になると、デストラクターが書かれている場合は、どこかのタイミングでデストラクターが実行されます。(デストラクターが実行されるのは基本的に1回です。)
デストラクターが実行された後は、そのオブジェクトがデストラクターも含めてどんな方法でもアクセスできなくなるとコレクション可能な状態になります。
コレクション可能な状態になったオブジェクトは、System.GCクラスを使って書かないかぎりは、自動的にどこかのタイミングでガベージコレクションされ、メモリが解放されます。
ガベージコレクションの対象になるオブジェクトは?
ガベージコレクションの対象になるオブジェクトは、そのオブジェクトにデストラクタ以外の方法でアクセスができない場合に、使われていないとみなされて対象になります。
ガベージコレクションが実行されるタイミングは?
ガベージコレクションが実行されるタイミングは、プログラムの実行中に不規則に行われます。
ガベージコレクションの対象になるオブジェクトができたからといって、その都度実行されるわけではありません。
また、それほど頻繁にガベージコレクションが実行されませんが正確に予測することはできません。
しかし、ガベージコレクタはSystem.GCクラスの静的メソッドを使うと、コレクションやデストラクタの実行や実行しないタイミングをある程度制御することができます。
ガベージコレクションを停止することはできる?
ガベージコレクションを停止させることはできません。