我知道dispose函数的作用是清除非托管资源。
但根据Microsoft's pattern(据我所知)他们这样做:
他们开了一个新的集中功能,它需要bool
(isDispoisng);
如果是True
,那么它来自dispose func(使用using
或其他内容) - 它会清除非托管并托管
if false
,它来自终结器/析构函数。并且他只是杀死了无人管理的人。
我不明白为什么微软的模式会杀死managed
如果isDispoisng==True
(参见粗体字)。
我认为 finilize应该杀死只是非托管....
你能解释一下吗?
他们想要在这方面取得什么成果?
答案 0 :(得分:4)
因为您的托管资源可能会保留可能需要处理的其他(非托管)资源。
因此,任何实现IDisposable的对象都应该通过调用它的Dispose方法来处理。
编辑:事实上,还需要消除事件处理程序连接,否则会阻止对象超出范围并被垃圾收集。
答案 1 :(得分:0)
最终确定涉及性能和延迟成本。理想情况下,对于任何给定的实例,我们应该避免尝试避免调用终结器。如果调用Dispose并清除非托管资源,则可以这样做。
如果您对推荐的处置模式的解释比您在大多数MSDN内容中找到的更清楚,http://msdn.microsoft.com/en-us/magazine/cc163392.aspx是一个非常好的起点。
顺便说一句,从.NET 2.0开始,终结器的实现不再是清理非托管资源的推荐方法。相反,除了SafeHandle之外,你应该使用very few "special" scenarios。