什么是RequestFinalizeOnShutdown方法

时间:2015-06-29 11:42:00

标签: c#

我多次听说过RequestFinalizeOnShutdown方法。上次我在Build 2014中听说过它。

我能得到的只是一个简短的描述

  

当应用程序终止时,某些对象仍然可以访问,并且不会调用其Finalize方法。如果后台线程正在使用对象,或者在应用程序关闭或AppDomain卸载期间创建了对象,则会发生这种情况。此外,默认情况下,当应用程序退出时,不会为无法访问的对象调用Finalize方法,以便应用程序可以快速终止。当然,将回收所有操作系统资源,但托管堆中的任何对象都无法正常清理。您可以通过调用System.GC类型的RequestFinalizeOnShutdown方法来更改此默认行为。但是,您应该小心使用此方法,因为调用它意味着您的类型正在控制整个应用程序的策略。

来自C的力量的第502页Rajeev A. Parida的书,来自互联网上的一些随机帖子 [1] [2]2 mysterious links在MSDN上实际上无处可去。最有趣的是,StackOverflow上从未提及过这种方法。

这种方法是什么?它被重命名了吗?书中描述的行为是否正确?

1 个答案:

答案 0 :(得分:2)

难以准确,这大部分都是在时间的迷雾中丢失,但这种方法似乎可以追溯到2001年1月下旬.NET 1.0 beta 1发布时。许多博主和书籍作者对此感兴趣,并撰写了有关垃圾收集的详细信息。看起来早期版本中的策略是在程序关闭时完成对象。并且调用GC.RequestFinalizeOnShutdown()改变了这一点。

一个相当有缺陷的想法,它再次从beta 2中删除。但是,有些不可避免地,博主和书籍作者没有更新他们的思考,导致这种方法不应该被遗忘。

你需要忽略这一点,终结器在关机时运行,并且没有任何方法可以重新配置它。超时确保它不会卡住,默认为2秒。