【发布时间】:2012-07-06 10:24:06
【问题描述】:
在聊天讨论过程中,我编写了这个控制台应用程序。
代码:
using System;
class Program
{
static void Main(string[] args)
{
CreateClass();
Console.Write("Collecting... ");
GC.Collect();
Console.WriteLine("Done");
}
static void CreateClass()
{
SomeClass c = new SomeClass();
}
}
class SomeClass
{
~SomeClass()
{
throw new Exception();
}
}
结果:
Collecting... Done
Unhandled Exception: System.Exception: Exception of type 'System.Exception' was
thrown.
at SomeClass.Finalize()
我本以为应用会在 Done 打印之前崩溃。
我不太关心如何制作它。我的问题是,为什么不呢?
【问题讨论】:
-
下面的链接解释了 System.GC() 的行为,以及可以调用它的选项:stackoverflow.com/a/3499595/639960
-
这就是
GC.WaitForPendingFinalizers的用途:msdn.microsoft.com/en-us/library/… -
在测试时抛出 WaitForPendingFinalizers ,而不是在收集发生时调用终结器。
标签: c# garbage-collection destructor finalizer