カスタム タイプと、要求に応じてタイプのオブジェクトを作成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
が、このアプローチは「変更され参照されていない」ケースを処理しないようです。
作成したオブジェクトを辞書に保存する方法は次のとおりです。
- ガベージコレクションされる可能性があります
- 参照せずに変更するとガベージコレクションされませんか?