Ken*_*nky 12 clr garbage-collection weak-references sos
我有一个对象,我认为它只由WeakReference持有.我已经使用SOS和SOSEX跟踪了它的参考持有者,并且都证实了这种情况(我不是SOS专家,所以我在这一点上可能是错的).
WeakReferences的标准解释是GC在进行扫描时会忽略它们.尽管如此,我的对象仍然存在于GC.Collect(GC.MaxGeneration,GCCollectionMode.Forced)的调用中.
仅使用WeakReference引用的对象是否可以在该集合中生存?是否有一个更加彻底的收藏品,我可以强迫?或者,我是否应该再次访问我的观点,即对象的唯一引用是弱的?
更新和结论
根本原因是堆栈上有一个锁定对象的引用.目前还不清楚为什么SOS和SOSEX都没有显示该参考.用户错误始终是可能的.
在诊断根本原因的过程中,我做了几个实验,证明对第二代物体的WeakReferences可以坚持很长时间.但是,WRd第二代对象将无法在GC.Collect(GC.MaxGeneration,GCCollectionMode.Forced)中存活.
根据维基百科“仅由弱引用引用的对象被认为是不可访问的(或“弱可访问的”),因此可以随时收集。弱引用用于避免保留不需要的对象引用的内存”
我不确定你的案例是否与弱引用有关......