2012-06-15 24 views
0

就我所知,我知道像GC执行集合操作以删除非托管资源以释放称为隐式清理的内存。通过使用'USING'关键字,我们可以做到明确的清理,但是我怀疑GC是如何释放管理资源的。GC如何释放C#中的管理资源

+0

你是什么意思的“如何”?看看[MSDN文档](http://msdn.microsoft.com/en-us/library/ee787088.aspx#conditions_for_a_garbage_collection),并让我们知道你是否有任何具体问题。 –

+0

感谢发布,如何像非托管的finalize方法的手段是有任何方法来管理源。 – nag

+0

嘿伊伦你能否请你发表你的答案,然后我将它标记为答案。 – nag

回答

2

为了让GC清理管理资源,您不必做任何特殊的事情。在没有引用留给您的托管资源后,GC将在某个时间清理它。

如果您的托管资源拥有非托管资源,则可以实施IDisposable界面并调用Dispose方法,您可以在其中显式清理非托管资源。 using声明使得使用该接口非常容易,因为即使在例外的情况下,当代码存在using块时它也会自动调用Dispose。

您可以查看Garbage Collection上的MSDN文档。

编辑:根据上面的评论。

可能通过定义终结符(例如〜MyClass())覆盖Object.Finalize,但不知道什么时候它将由GC调用。一次性使用IDisposable。终结者与处置here更多信息。

+0

感谢您的帮助。 :) – nag

+0

此外,如果在执行finalize()时出现错误,并且引发了未处理的异常,则垃圾回收器将崩溃,并且_will_将不时调试它:) – cwap

+1

@cwap如果我能够正确记住,如果您订阅了AppDomain.UnhandledException事件,则可以捕获这些内容。 –