사용자 정의 유형이 MyClass
이고 요청시 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 '답변을 확장
변경된 모든 개체를 넣을 추가 사전을 만드는 것은 어떻습니까? – CodesInChaos
@CodesInChaos 감사합니다. 흥미 롭습니다. 그러나 사전은 매우 커서 (수만 쌍이 될 수 있습니다.) 제가 그렇게 할 수 있다면 사전을 복제하지 않는 것이 좋습니다. – Bobrovsky
그게 몇 백 킬로바이트. 데스크톱 응용 프로그램이라면 괜찮을 것입니다. – CodesInChaos