如何定义在类终结期间存储“this”的代码?垃圾收集器应该如何表现(如果在某处定义)?
在我看来,GC 应该多次终结类实例,下面的测试应用程序将打印“66”,但终结器只执行一次,导致应用程序打印“6”。
几行代码:
using System;
namespace Test
{
class Finalized
{
~Finalized()
{
Program.mFinalized = this;
}
public int X = 5;
}
class Program
{
public static Finalized mFinalized = null;
static void Main(string[] args)
{
Finalized asd = new Finalized();
asd.X = 6;
asd = null;
GC.Collect();
if (mFinalized != null)
Console.Write("{0}", mFinalized.X);
mFinalized = null;
GC.Collect();
if (mFinalized != null)
Console.Write("{0}", mFinalized.X);
}
}
}
我要做的是了解终结器如何管理实例内存。在我的应用程序中,可能希望再次重用实例引用以进行进一步处理。
很明显,终结器不会“释放”内存(至少在我的测试应用程序中)。内存块可以用于其他目的吗?甚至被释放?如果不是,那将是内存泄漏还是什么?
现在,我比以前更困惑了。