我有一个自定义类型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
但似乎这种方法不能处理“更改和未引用”的情况。
我应该如何将创建的对象存储在字典中,以便它们:
- 可能被垃圾收集
- 未引用但更改时是否不收集垃圾?