繁体   English   中英

CriticalFinalizerObject 用法误解?

[英]CriticalFinalizerObject usages misunderstanding?

我在这里看到了这个线程,但没有得到我的想法的任何答案。

我的理解:

本地资源的回收将永远发生!

  • GC发生时(第二轮之后)
  • 调用处置
  • 使用Using
  • 程序崩溃
  • 优雅的终止程序

那么为什么我需要从CriticalFinalizerObject继承?

我没有看到任何不会回收资源的情况....

我错过了什么?

我的观点是本机资源将始终被回收

他们不是。 关键终结器在自定义托管方案中很重要。 一种非托管的关键任务程序托管 CLR,但不能简单地终止以让操作系统在托管代码崩溃时捡起碎片。

最好的例子是 SQL Server。

这一切都是为了控制。 有时,您想要的不仅仅是回收原生资源。 BCL 中的大多数(如果不是全部)本机资源使用者都实现了 CriticalFinalizerObject。 例如, FileStream 实现了 CriticalFinalizerObject 以便在关闭底层文件句柄之前清除所有缓存数据。

CriticalFinalizerObject类确实为 Dispose/Finalize 过程增加了一些可靠性。 就像防止Thread.Abort()等。

那么为什么我需要从 CriticalFinalizerObject 继承?

使用Safehandle : CriticalFinalizerObject主要原因是它可以让您免于处理非托管资源模式。 SafeHandle 将非托管资源转换为托管资源,请参阅Joe Duffy

我不认为作为应用程序程序员,您将永远必须从 CriticalFinalizerObject 派生一个类,但是当您必须处理“句柄”时,您应该使用SafeHandle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM