应该很简单。假设我有以下代码:
void Method()
{
AnotherMethod(new MyClass());
}
void AnotherMethod(MyClass obj)
{
Console.WriteLine(obj.ToString());
}
如果我调用“Method()”,在此过程中创建的 MyClass 对象会发生什么情况?调用后它是否仍然存在于堆栈中,即使没有任何东西在使用它?还是立即删除?
我是否必须将它设置为 null 才能让 GC 更快地注意到它?
最佳答案
在对 Method 的调用完成后,您的 MyClass
对象仍然存在,但没有根值对它的引用。因此它将一直存在到下一次 GC 运行时将被收集并回收内存。
除了强制 GC 之外,您真的无法加快此过程。然而,这可能是个坏主意。 GC 旨在清理此类对象,您为使其更快而做出的任何尝试都可能导致其整体变慢。您还会发现 GC 在正确清理托管对象的同时,实际上可能不会减少系统中的内存。这是因为 GC 保留它以备将来使用。这是一个非常复杂的系统,通常最好留给它自己的设备。
关于C# .NET 对象处置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2111089/