可能重复:
弱引用
这东西是干什么用的?
这似乎是一种创建 GC 可以及早收集的对象的方法,如果它被提前收集,我应该重新创建它。这听起来像是缓存,但其他StackOverflow 问题说这是一个糟糕的缓存策略,因为实际上 GC 会非常急切和快速地 GC 你的对象,(另一个 Q 说弱引用使缓存很差)有点像使用 ASP.NET 的缓存并将其设置为非常低的缓存逐出时间限制。
背景:我最近在阅读 TraceSource 的 CLR 代码。在构造函数中,发生的第一件事是将 WeakReference(this) 添加到静态字典中。奇怪的是,只有当 TraceSource 重新读取弱引用字典中每个 TraceSource 的配置文件时,它才会在 Refresh 方法中使用,但前提是它还没有被 GC'd。另一个StackOverflow 问题表明这会导致内存泄漏。
因此,从那以后我一直在阅读有关 WeakReferences 的内容,并且越来越感到困惑。