【发布时间】:2014-01-15 06:45:24
【问题描述】:
如果我们要处理持有非托管资源的对象,我想知道我们是否应该使用 dispose 和 finalize。 第二件事,如果我们处置一个对象,该对象是否仅在该时刻释放内存以及非托管资源,或者该对象的内存稍后将被垃圾收集器释放。我想在 fianiilize 上下文中知道同样的事情,一旦我们完成一个对象,它会在确定的时间释放该对象的内存,或者我们必须等到垃圾收集器释放它的内存。
【问题讨论】:
-
Afaik,gc 负责 任何 托管资源。
-
托管内存仅由垃圾收集器回收。没有其他机制。
-
anton-tykhyy:so dispose 机制总是针对非托管资源,当finalize是所有托管资源的GC内部机制时,什么时候手动使用finalize?
-
嗯,最终是的,因为所有有趣的东西(文件、套接字、数据库)都是非托管的当一切正常并且代码中没有错误时,以一种确定的方式。最终机制是在对象没有被正确处理时释放仅非托管资源,通常是因为有人忘记了
Dispose。当你有一种非托管资源,SafeHandles 等还不够时,你只需要编写自己的终结器。