2010-11-22 30 views
0

DOT NET垃圾收集器只能处理内存资源,还能处理孤立对象使用的其他资源?dot net内存处理,CLR垃圾回收器是否处理其他资源?

CLR如何处理以释放孤立对象所使用的其他资源。

+0

这** **必须是重复的,但我可以的事情这是问题的重复关... – 2010-11-22 11:12:18

+0

可能是重复的,我第一次尝试在这里但没有得到。现在我得到了一些关于CLR内存管理的答案和关键字。 – PawanS 2010-11-22 11:26:32

回答

0

.Net GC只管理放置在托管堆上的对象,即托管对象。这些托管对象可能会导致访问非托管对象,如数据库连接或文件句柄等。开发人员需要通过实现IDisposable或Finalize来释放这些资源,具体取决于您的需要。

MSDN指出:

A类必须实现最终确定时,它 使用非托管资源,如文件句柄 或数据库连接时使用它们的管理 对象被回收该 必须被释放。 请参阅IDisposable接口,了解如何配置 补充资源和更可控的 资源配置方式。

这里的链接是相同的:http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx

+0

不,使用Finalize不是释放非托管对象的正确方法。你应该使用IDisposable接口。 – Guffa 2010-11-22 11:08:31

+0

如果您想使用确定性处置 - 使用IDisposable接口。你永远不知道什么时候你的终结者将被称为 – ppiotrowicz 2010-11-22 11:11:23

+0

同意。我的错。最佳实践表明,应尽可能使用IDisposable。 – 2010-11-22 11:20:30

4

GC只处理被管理对象。

所有非托管资源需要进行手工处理:

  1. 在使用非托管资源的任何类型的落实IDisposable接口。
  2. 确保在完成使用实现IDisposable的任何对象时调用Dispose方法。这通常通过使用using块来完成。
+0

Thanx你可以建议任何链接.. – PawanS 2010-11-22 11:10:29

+0

http://msdn.microsoft.com/en-us/magazine/cc163392.aspx – ppiotrowicz 2010-11-22 12:06:56