GCクラスを使用することで、ガベージコレクタに対する要求や、ガベージコレクタの状態の取得を行うことができます。
一例として、GC.Collectメソッドを使うと、ガベージコレクタに対してガベージコレクションの実施を要求することができます。 メソッドが呼び出される時点で不要と判断されるオブジェクトの回収が行われます。 なお、ガベージコレクションは通常、適切なタイミングで自動的に行われます。
また、GC.WaitForPendingFinalizersメソッドを使うと、不要と判断されているオブジェクトに対するファイナライザ(実行が保留されているファイナライザ)の実行終了を待機することができます。
これらはいずれも、.NETランタイム全域に影響を及ぼし、またパフォーマンスにも影響するため、不用意に呼び出すことは避けるべきです。
GC.Collectメソッドでガベージコレクションの実施を要求する、GC.WaitForPendingFinalizersで保留中のファイナライザ実行を待機する
using System;
class Resource {
public Resource() => Console.WriteLine("constructed");
~Resource() => Console.WriteLine("finalized");
}
class Sample {
static void Main()
{
static void AllocateAndRelease() => new Resource();
// オブジェクトを作成して、そのまま放棄する(破棄・解放ではない)
AllocateAndRelease();
// GC.Collectメソッドを呼び出し、ガベージコレクションの実施を要求する
Console.WriteLine("GC.Collect");
GC.Collect();
// GC.WaitForPendingFinalizersメソッドを呼び出し、
// 保留されているファイナライザの実行を待機する
Console.WriteLine("GC.WaitForPendingFinalizers");
GC.WaitForPendingFinalizers();
Console.WriteLine("end");
}
}
実行結果
constructed GC.Collect GC.WaitForPendingFinalizers finalized end