desctructorCheck 类中的以下析构函数代码在几乎2秒之后关闭控制台,然后从用户获取任何输入。
~destructorCheck() {
Console.WriteLine("Destructor");
Console.ReadLine( );
}
为何关闭? 析构函数有任何计时器来完成清理过程吗?
答案 0 :(得分:2)
原因是,由于Destructors的调用方式如下:
引用MSDN:
'程序员无法控制何时调用析构函数 因为这是由垃圾收集器决定的。垃圾 收集器检查不再被使用的对象 应用。如果它认为某个对象有资格进行销毁,那么 调用析构函数(如果有的话)并回收用于存储的内存 物体。程序退出时也会调用析构函数。'
我同意阅读Eric Lippert的博客是一件好事!
如果你需要确保在销毁C#对象时发生某些事情,你应该实现IDisposable并将你的闭包逻辑放入Dispose方法。
答案 1 :(得分:2)
是。终结者在终止之前的时间有限。
这是终结者最后工具的众多原因之一。它们不能保证首先运行,并且不能保证完成。它们只是运行,因为框架确实需要该对象离开现在 - 它是GC并且因为它需要内存,或者您的应用程序正在关闭。
我非常确定时间限制是2秒,而且我也不知道有任何改变它的方法。