有没有办法释放某些对象使用的所有资源?
如果没有,为什么我不使用GC.Collect()
方法?
答案 0 :(得分:2)
具有资源的类型应该实现IDisposable
,并且通过调用Dispose
(或将它们包装在using
语句中)来释放这些资源。只有具有资源但未实现GC.Collect
的编写糟糕的对象才需要IDisposable
。
答案 1 :(得分:2)
这取决于你的意思。
如果您只是在谈论内存,那么当不再有对该对象的引用时,GC将确实为您处理。调用GC.Collect将提示GC运行,但是从来没有任何保证GC运行的时候,即使你调用GC.Collect,因为它在一个单独的线程上运行。
如果您正在谈论非托管资源,例如文件句柄,数据库连接等,那么管理它们的最佳方法是实现IDispsable接口,然后调用Dispose的代码的调用者将释放这些资源。方法(或者实际上通过GC处理你的对象)。