我遇到了以下引语:“不能保证会被称为解析器。”这让我有点害怕。
接着说,即使是try finally块也可能被中断,导致内存泄漏。
它确实通过将代码置于CER(受约束的执行区域)或从CriticalFinalizerObject
派生来提供解决方案。
我的问题是
CriticalFinalizerObject
,如果有的话有哪些传统?CriticalFinalizerObject
真的很有用吗?答案 0 :(得分:4)
你为什么依赖于解析器?大部分时间你都不需要它们。
或许看一下IDisposeable和Dispose Pattern。
这里有一些链接让我理解这个主题
- > Everybody thinks about garbage collection the wrong way
- > How To implement dispose Pattern
- > Implementing Finalize and Dispose to Clean Up Unmanaged Resources
答案 1 :(得分:1)
关于问题3:内存泄漏通常是由以下原因引起的:
未释放未管理的资源。对于那些,使用IDisposable(在终结器中对Dispose()进行后备调用)是最好的方法。
对由于其他对象仍然指向它们而维护的托管对象的引用,即使它们应该被删除。 IHMO,这是一个代码质量问题,而不是垃圾收集的低级问题。
除非你遇到实际的内存泄漏,否则你甚至不应该担心它,也不要试图强迫任何行为。
答案 2 :(得分:0)
我建议将IDisposable
接口用于需要销毁的所有资源,并在using
块中使用它们。
答案 3 :(得分:0)
通常,正常终结器和关键终结器之间的差异仅在AppDomain卸载时变得很重要。由于大多数非托管资源会在进程卸载时自动消失,因此如果要在保持进程运行的同时干净地卸载AppDomain
,通常只需担心关键的最终化。