[英]Dictionary of weak and non-weak references
我有一个自定义类型MyClass
和一个工厂类Factory
,该工厂类可根据要求创建MyClass
类型的对象。
Factory
将创建的对象存储在字典中,因为创建对象的成本很高,并且有时会要求多次创建同一对象。 具有相同标签的每个对象只能创建一次。
class MyObject
{
// .. not important
}
class Factory
{
private Dictionary<int, MyObject> m_objects = new Dictionary<int, MyObject>();
public MyObject CreateObject(int tag, params object[] parameters)
{
MyObject obj;
if (!m_objects.TryGetValue(tag, out obj))
{
obj = new MyObject();
// .. some initialization
m_objects.Add(tag, obj);
}
return obj;
}
}
对象可能会并且可能不会在未知时间范围内存储在 Factory
外部的某个位置 。 创建后可能会更改对象。 有时Factory
存储对对象的引用,而该对象不会存储在其他任何地方。
现在,我要让垃圾收集器完成其工作。 我希望不将对象存储在Factory
之外的任何地方并且不进行更改以进行收集。
我的第一个想法是对Factory
中字典中的值使用弱引用,但似乎这种方法无法处理“更改和未引用”的情况。
我应该如何将创建的对象存储在字典中,以便它们是:
扩展CodesInChaos的答案,我认为您使用原始Dictionary
弱引用在正确的轨道上,并且我认为使用第二个数据结构(可能在此处适用于HashSet
是有意义的,该结构仅保存对对象的引用已经改变了。
请记住,存储对对象的引用很便宜。 我认为,在您开始关注之前,您必须拥有数百万或数十亿个参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.