C# 内存管理:终结器、IDisposable 模式与内存泄漏预防
1. 弱引用的使用建议
为提升应用程序性能,避免在众多小对象上使用弱引用,因为它们占用的内存空间可能比所包装的对象更多,从而增加性能开销。但如果处理大量大型且昂贵的对象,使用缓存的弱引用可能有助于提升应用程序性能。
2. C# 中的终结器(Finalization)
2.1 终结器概述
在 C# 中,没有直接销毁对象的方法,最接近的是终结器。C# 中的终结器类似于 C++ 中的析构函数,但在 C# 中,无法控制终结器何时运行,这由垃圾回收器决定。
- 终结器和析构函数在 C# 中可互换使用。对象的终结器运行后,对象仍被视为存活,垃圾回收器最终会回收该对象。这意味着如果对象定义了终结器,实际上会被标记为“可回收”两次。
- 终结器用于对象在被垃圾回收之前释放资源和执行其他清理操作。可以通过重写受保护的 Finalize() 方法来执行释放对象所持有非托管资源的清理操作。
2.2 Finalize() 方法的调用规则
- 若在释放对象资源期间调用了
GC.SupressFinalize(),则不会调用Finalize()方法。 - 当对象变得不可访问时,以及在应用程序域(AppDomain)关闭时(即使对象仍可访问),
Finalize()方法会自动调用。 -
Finalize()方法通常只运行一次,除非未调用
C#内存管理与泄漏防治
超级会员免费看
订阅专栏 解锁全文
59

被折叠的 条评论
为什么被折叠?



