C# でアクションを使用していますが、GC でオブジェクトを適切に収集したい場合、アクションのインスタンスを null に設定する必要があるかどうか疑問に思っていました。次に例を示します。
public class A
{
public Action a;
}
public class B
{
public string str;
}
public class C
{
public void DoSomething()
{
A aClass = new A();
B bClass = new B();
aClass.a = () => { bClass.str = "Hello"; }
}
}
Main メソッド内には、次のようなものがあります。
public void Main(...)
{
C cClass = new C();
cClass.DoSomething();
Console.WriteLine("At this point I dont need object A or B anymore so I would like the GC to collect them automatically.");
Console.WriteLine("Therefore I am giving GC time by letting my app sleep");
Thread.Sleep(3000000);
Console.WriteLine("The app was propably sleeping long enough for GC to have tried collecting objects at least once but I am not sure if A and B objects have really been collected");
}
}
Console.WriteLine のテキストを読んでください。ここで私が求めていることを理解するのに役立ちます。
GC に関する私の理解をこの例に当てはめると、A は B のインスタンスを保持しているため破棄できないため、GC はオブジェクトを収集しません。
これらの 2 つのオブジェクトを適切に収集するにはどうすればよいですか? アプリケーションの終了前にGCがオブジェクトを収集できるようにするためだけに、アクションのインスタンスをnullに設定する必要がありますか?それとも、AやBなどのアクションを持つオブジェクトを破棄する方法を知っているGCによる非常にスマートなメカニズムがすでにありますか?
編集:問題は、GC とオブジェクトの適切な収集に関するものです。メソッド collect() を呼び出すことではありません。