C# 内存管理:终结器、IDisposable 模式与内存泄漏预防
1. 弱引用与性能
在优化应用程序性能时,要谨慎使用弱引用。对于大量小对象,使用弱引用可能会占用比对象本身更多的内存空间,从而增加性能开销。但如果处理大量大型昂贵对象,使用缓存的弱引用可能有助于提高应用性能。
2. C# 中的终结器
在 C# 中,没有直接销毁对象的方法,最接近的是终结器(Finalizer)。终结器类似于 C++ 中的析构函数,但在 C# 中,无法控制终结器何时运行,这由垃圾回收器决定。以下是一些关键要点:
- 终结器和析构函数 :在 C# 中,“终结器”和“析构函数”这两个术语可互换使用。对象的终结器运行后,对象仍被视为存活,直到垃圾回收器最终回收该对象。这意味着定义了终结器的对象实际上会被标记为“可回收”两次。
- Finalize() 方法 :对象使用终结器在被垃圾回收之前释放资源和执行其他清理操作。可以通过重写受保护的 Finalize() 方法来执行释放非托管资源的清理操作。当重写 Finalize() 方法时,对象实例的条目会被放入终结队列。在回收内存之前,垃圾回收器会为终结队列中的每个对象实例调用 Finalize() 方法。
- 注意事项 :
- 无法控制 Finalize() 方法何时被调用。
- 为保证实例中托管和非托管资源的释放,可使用 IDisposable
超级会员免费看
订阅专栏 解锁全文
73

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



