dispose()应该包含与对象相关的清理代码(例如关闭任何由对象占用的资源-文件或数据库连接等)。
我还被告知,如果我们不在dispose()方法中执行清理操作,则可以在析构函数中执行,但这不能确保立即执行,而且我们只能依赖垃圾回收器执行。
如果我们根本没有提供任何清理代码,GC将强制终止我们的对象所持有的所有资源的所有连接。因此,我们应该自己处理清理代码。
但我很好奇为什么CLR不能自行处理呢?它负责内存管理,它负责垃圾收集。因此,它应该非常清楚哪个对象保持哪些资源以及何时该对象消亡。因此,它也应该能够释放这些资源,对吗?
我向一些人询问了这个问题。我得到的答案是因为我们需要优雅地关闭,而GC则强制关闭。这真的是原因吗?
IDisposable
处理非托管对象,我说得对吗? - Alvin Wong