![](/img/trans.png)
[英](.net) CriticalFinalizerObject - What does it really do?
[英]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.