C# - 释放对象使用的所有资源

时间:2010-05-17 15:44:01

标签: c# garbage-collection memory-management

有没有办法释放某些对象使用的所有资源?

如果没有,为什么我不使用GC.Collect()方法?

2 个答案:

答案 0 :(得分:2)

具有资源的类型应该实现IDisposable,并且通过调用Dispose(或将它们包装在using语句中)来释放这些资源。只有具有资源但未实现GC.Collect的编写糟糕的对象才需要IDisposable

答案 1 :(得分:2)

这取决于你的意思。

如果您只是在谈论内存,那么当不再有对该对象的引用时,GC将确实为您处理。调用GC.Collect将提示GC运行,但是从来没有任何保证GC运行的时候,即使你调用GC.Collect,因为它在一个单独的线程上运行。

如果您正在谈论非托管资源,例如文件句柄,数据库连接等,那么管理它们的最佳方法是实现IDispsable接口,然后调用Dispose的代码的调用者将释放这些资源。方法(或者实际上通过GC处理你的对象)。