【发布时间】:2010-05-17 15:44:01
【问题描述】:
有没有办法释放某个对象使用的所有资源?
如果不是,我为什么不使用GC.Collect() 方法?
【问题讨论】:
标签: c# garbage-collection memory-management
有没有办法释放某个对象使用的所有资源?
如果不是,我为什么不使用GC.Collect() 方法?
【问题讨论】:
标签: c# garbage-collection memory-management
具有资源的类型应该实现IDisposable,并通过调用Dispose(或将它们包装在using 语句中)来释放这些资源。 GC.Collect 仅适用于具有资源但未实现 IDisposable 的写得不好的对象。
【讨论】:
GC.Collect 是一种让他们的坏代码工作的方法,至少就资源而言。另一方面,如果他们甚至不能正确地做到这一点,人们一定想知道他们的课程中潜伏着多少其他错误......
这取决于你的意思是什么资源。
如果您只是在谈论内存,那么当不再有对该对象的任何引用时,GC 确实会为您处理。调用 GC.Collect 将提示 GC 运行,但永远无法保证 GC 何时运行,即使您调用 GC.Collect 因为它在单独的线程上运行。
如果您谈论的是非托管资源,例如文件句柄、数据库连接等,那么管理这些资源的最佳方法是实现 IDispsable 接口,然后这些资源将由调用 Dispose 的代码调用者释放方法(或者实际上是通过 GC 处理您的对象)。
【讨论】: