栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

GC,Finalize()和Dispose之间是什么关系?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GC,Finalize()和Dispose之间是什么关系?

GC是垃圾回收。它是自动内存管理,用于处理托管堆上分配的对象的清除。.NET
GC使用标记和清除算法。发生垃圾收集时,它基本上将堆中要清除的所有对象视为可恢复。然后,它经过标记过程,在其中扫描根。即,它标识应用程序仍在使用的对象。完成后,其余对象就有资格进行清理。堆可以作为清理的一部分进行压缩。

处置和终结处理方法都提供了清理资源的选项,这些资源 不是 由GC处理的。例如,这可能是本机句柄等。它们与回收托管堆上的内存无关。

必须在实现的类型上显式调用Dispose

IDisposable
。可以通过
Dispose()
方法本身或通过
using
构造来调用它。GC不会自动调用Dispose。

另一方面,终结器或析构函数(如语言规范所称)将在对象符合清除条件的 某个 时间自动被调用。Finalize方法在专用线程上顺序执行。

Dispose()
允许确定性地清理资源,而终结器可以作为安全网,以防用户不打电话
Dispose()

如果类型实现了终结器,则实例的清理会延迟,因为必须在清理之前调用终结器。也就是说,将需要额外的收集来回收该类型实例的内存。如果类型也实现IDisposable,则可以调用Dispose方法,然后实例可以将其自身从终结处理中移除。这将允许清除对象,就好像它没有终结器一样。

如果您想深入研究这一点,我建议使用Jeffrey
Richter的C#进行CLR
。这是一本很棒的书,它涵盖了本书的所有细节(我省略了许多细节)。新的第三版刚刚发布。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465308.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号