2012-01-06 23 views
0

可能重复:
Finalize vs Dispose处置敲定和析构函数

处置 - 这将释放对象的内存和GC应该在这种情况下supperessed。

最终确定 - 如果对象没有被处置,当对象超出范围时(我的意思是当类不在作用域内)时,GC会说Finalize来清理它。

析构函数 - 不知道。你能解释不同的B/W析构函数并最终确定吗?

+0

终结者是软C#的descrutor版本,虽然这两者之间有混合的语言。 – 2012-01-06 04:15:26

回答

1

敲定
它是利用垃圾收集隐含释放的空间。

破坏者
它用于破坏变量的值。

+0

查看更多关于[http://stackoverflow.com/questions/456213/destructor-vs-idisposable]和[http://stackoverflow.com/questions/8753205/dispose-finalize-and-destructors/8753255#8753255] – 2012-01-06 04:16:53

1

析构函数隐式调用敲定,所以它是一个排序前敲定的。

详情请参阅MSDN。该文档中的一个重要消息:

即使对资源进行了这种显式控制,析构函数也会成为在Dispose方法调用失败时清理资源的保障措施。

2

处置不能释放内存。 Dispose()方法释放或关闭非托管资源。

1

Descrtuctor是在C++和终结在.NET。虽然用C#代码表示终结器的方式看起来像是一个C++描述符,但它不一样,它的行为也不同。

最后确定是最后的过程,发生在.NET中的内存管理。处置是清理非托管内存的模式。请记住,Dispose是手动或显式调用的操作,而finalizer则不是。它在运行时自动运行。

您不妨读一读this

+0

我应该通过gc.suppressfinalize抑制析构函数中的finalize,因为finalize和析构函数似乎可以清理内存? – Pankaj 2012-01-06 04:19:02

+0

如果您遵循MSDN建议的标准Dispose模式,那么应该禁止终止,因为终结过程非常昂贵,并且执行两次操作是浪费并且有时会出现问题。所以如果你自己清理记忆,那么为什么GC需要再做一轮呢? – Zenwalker 2012-01-06 04:23:53

+0

谢谢。了解 – Pankaj 2012-01-06 05:45:33