我有一些类通过 IDictionary 实例成员保存对其他类的引用。
像这样:
class A
{
private readonly Dictionary<int, B> _particles = new Dictionary<int, B>();
public void CreateNewB(int someInt)
{
var b = new B();
if (!_particles.ContainsKey(someInt)
_particles.Add(someInt, b);
}
}
所以这就是设置,我从不从这本字典中删除它们,但由于某种原因,B 类的析构函数不时在 GC 运行时被调用,我不明白为什么。
这可能与 Dictionary 类如何添加新引用有关吗?
固定:
好的,谢谢大家的回答,我现在对GC和解构器当然有了很大的了解。
但问题是我自己的,我只在它不存在的情况下添加someInt并且通过有缺陷的业务逻辑, someInt始终为 1,所以第一次通过它工作并且解构器没有被调用。但是第二次,“b”实例根本没有添加到列表中,而是在 GC 运行中被清理了。
再次感谢所有提供帮助的人!