2009-07-03 3 views
0

매우 복잡한 객체 그래프 Go1의 객체가 G입니다. G은 NHibernate를 사용하여 데이터베이스에 기록됩니다. 그러나 데이터베이스에 영구 항목 o1 (o1_p이라고 함)이있는 경우 o1_po1으로 바꿉니 다. 따라서 데이터베이스에 중복 항목이 없어야합니다. 이제 나는 NHibernate가 그 일을하게하고 나중에 데이터베이스를 조사한다. 이제 나는 피하려고 노력한 상황이 있습니다. 원래 o1_p 오브젝트에 대한 항목과 o1이 데이터베이스에 있습니다. 지금까지 가지고있는 유일한 설명은 o1이 다른 경로를 통해 G에 도달 할 수 있으며 그래서 hibernate는 그것을 데이터베이스에 저장합니다. 이 경우에 대해 확인할 수있는 방법이 있습니까, 즉 가비지 수집기에 얼마나 많은 참조가 있는지 물을 수 있습니까 (o1). 또는 그래프 언어로 말하십시오 : 얼마나 많은 들어오는 가장자리 o1 있나요?C#에서 개체 그래프 내에서 개체에 도달 할 수 있는지 어떻게 확인할 수 있습니까?

답변

1

아니요, 가비지 수집기에 o1에 대한 참조 수를 요청할 수 없습니다. .NET은 참조 카운팅을 사용하지 않습니다.

기본적으로 모든 그래프 탐색을 직접 수행해야합니다. 이는 이미 조사한 객체의 캐시와 결합 된 일종의 방문자 알고리즘을 객체 그래프에 구현하는 것을 의미합니다. 그리고 예,이 은 GC가 수행하는 것과 비슷한입니다.하지만 처리 방법을 찾지 못한다고 생각합니다. (그리고 아마도 GC가 무언가가 쓰레기가 아니며 어쨌든 그것을 무시하고 코드에 적합하지 않은 특수한 트릭과 관련된 가장자리 사례가있을 수 있습니다.)

관련 문제