我在 C# 中使用 Actions,我想知道一旦我希望 GC 正确收集对象,是否需要将 Action 的实例设置为 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 的理解应用于此示例,则 GC 将永远不会收集对象,因为 A 不能被销毁,因为它拥有 B 的实例。我说的对吗?
我怎样才能正确收集这两个对象?我是否需要将 Actions 的实例设置为 null 只是为了让 GC 在应用程序结束之前收集对象,还是 GC 已经有某种非常智能的机制知道如何销毁具有 A 和 B 等 Action 的对象?
编辑:问题是关于 GC 和正确收集对象。它与调用方法 collect() 无关。