我有一个非常复杂的对象图G
,o1
中有一个对象G
。 G
将使用NHibernate写入数据库。但是,如果数据库中已存在o1
(我们称之为o1_p
)的持续条目,我会将o1
替换为o1_p
。因此,数据库中不应有冗余条目。现在我让NHibernate完成它的工作,然后我查看数据库。现在我确实有我试图避免的情况。在数据库中有原始o1_p
对象和o1
的条目。到目前为止我唯一的解释是o1
可以通过G
中的另一条路径到达,所以hibernate将它放入数据库。有没有办法可以确定是否是这种情况,即我可以向垃圾收集器询问有多少引用o1
。或者用图形语言说话:o1
有多少个传入边?
答案 0 :(得分:1)
不,你不能向垃圾收集器询问o1有多少引用:.NET不使用引用计数。
基本上你必须自己做所有的图形导航,这可能意味着让你的对象图实现某种访问者算法,并结合你已经检查过的对象缓存。是的,这个 类似于GC会做的事情,但我不相信有任何方法可以挂钩它的处理。 (并且可能存在涉及特殊技巧的边缘情况,其中GC知道某些东西不是垃圾并且无论如何都会忽略它,这不适合您的代码。)