什么是RequestFinalizeOnShutdown方法

本文关键字:方法 RequestFinalizeOnShutdown 什么 | 更新日期: 2023-09-27 18:00:30

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

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

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

来自Rajeev A.Parida的《C#的力量》一书第502页,一些来自互联网的随机帖子[1],[2]和MSDN上的两个神秘链接,这些链接实际上毫无用处。最有趣的是,这种方法从未在StackOverflow上被提及。

这个方法是什么?它改名了吗?书中描述的行为正确吗?

什么是RequestFinalizeOnShutdown方法

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

一个相当有缺陷的想法,它再次从测试版2中删除。但是,在某种程度上不可避免的是,博客作者和书籍作者没有更新他们的思考,导致这种方法没有像应该的那样被遗忘。

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