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 클래스가 새로운 참조를 추가하는 방법과 관련이있을 수 있습니까? FIXED
:
좋아, 나는 확실히 지금 GC와 deconstructors에 대한 많은 이해를 얻을 수 있습니다, 귀하의 답변에 대한 여러분 모두 감사합니다.
그러나 이미 및 결함이 비즈니스 로직을 통해 존재하지 않은 경우에만 문제가, 내가 someInt을 내 자신의 추가 하였다, someInt는 항상 1, 그래서 그것을 통해 처음 일을하고 deconstructors은하지 않았다 라는. 그러나 두 번째로 "b"인스턴스는 단순히 목록에 추가되지 않고 GC 실행에서 정리되었습니다.도와 주신 모든 분들께 다시 한번 감사드립니다.
동작을 재현하는 코드를 가장 작게 줄 수 있습니까? – jason
"Dictionary 클래스가 새로운 참조를 추가하는 방법과 관련이 있습니까?" 아주있을 법하지 않습니다. 사전에는 사전 참조가 수집 될 때까지 키 또는 값이 수집되지 않도록하는 강력한 참조가 있습니다. – itowlson
@Mark : 좋다, 안도의 한숨이다.설명하는 동작은 코드에 결함이 없으면 발생하지 않아야합니다. 우리가 "도울 수있어서 기쁘다." – jason