C#面试题更新 2026-08-05

请解释 C# 的 WeakReference 是什么,并说明如何利用弱引用来构建集合,以避免内存泄漏?

风险判断技术原理C#

考察说明

考查对弱引用概念的理解以及其在防止内存泄漏中的实际应用。

回答思路

  1. 【回答框架 1】弱引用是一种引用类型,它允许对象被垃圾回收,即使仍有引用指向它,除非该对象被强引用。在 .NET 中,WeakReference 用于跟踪对象生命周期,而不阻止其被回收,主要用于缓存大型对象等场景。
  2. 【回答框架 2】在 C# 中,WeakReference 类提供 Target 属性来访问所引用的对象。当对象被回收后,Target 变为 null。使用弱引用集合时,需要定期清理已回收的项,避免集合中积累无效引用。
  3. 【回答框架 3】实现弱引用集合时,可以基于 WeakReference 构建,如使用 List<WeakReference> 或 Dictionary<TKey, WeakReference>。添加元素时创建弱引用,访问时检查 Target 非空,否则移除。
  4. 【回答框架 4】防止内存泄漏的关键在于:弱引用不会阻止对象被回收,所以集合不会持有对象的强引用。但需注意,若仅通过弱引用访问对象,对象可能随时被回收,需设计合理的重建策略。
  5. 【回答框架 5】弱引用还可分为短弱引用和长弱引用(通过 WeakReference 构造函数参数控制),长弱引用在对象终结后仍可访问,但需谨慎使用,因为可能延长对象生命周期。
  6. 【关键点 1】WeakReference 允许对象被垃圾回收,避免内存泄漏。
  7. 【关键点 2】弱引用集合需定期清理已回收的对象。
  8. 【关键点 3】访问弱引用对象时需检查 Target 是否为空。
  9. 【易错点 1】不要错误认为弱引用能完全避免内存泄漏,需配合清理逻辑。
  10. 【易错点 2】弱引用对象可能随时被回收,可能导致性能问题。
  11. 【易错点 3】长弱引用使用不当可能阻止对象被及时回收。