Luc*_*uca 5 c# garbage-collection finalizer .net-2.0
如何定义在类定型期间存储'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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我要做的是了解终结器如何管理实例内存.在我的应用程序中可能希望再次重用实例引用以进行进一步处理.
很明显终结器不会"释放"内存(至少在我的测试应用程序中).可以将内存块重用于其他目的吗?甚至解放了?如果不是,那会是内存泄漏还是什么?
现在,我比以前更困惑了.
这是由于复活.通过在最终确定期间将对象存储在另一个变量中(分配this给变量),就GC而言,您将恢复 obejct实例.您可以在.NET中恢复对象,并且实际上可以使GC多次完成对象,但您必须通过GC.ReRegisterForFinalize显式请求它.
有关详细信息,请参阅Microsoft .NET Framework中的自动内存管理.