如何确定C#中的对象图中是否可以访问对象?

时间:2009-07-03 08:18:47

标签: c# nhibernate reference-counting

我有一个非常复杂的对象图Go1中有一个对象GG将使用NHibernate写入数据库。但是,如果数据库中已存在o1(我们称之为o1_p)的持续条目,我会将o1替换为o1_p。因此,数据库中不应有冗余条目。现在我让NHibernate完成它的工作,然后我查看数据库。现在我确实有我试图避免的情况。在数据库中有原始o1_p对象和o1的条目。到目前为止我唯一的解释是o1可以通过G中的另一条路径到达,所以hibernate将它放入数据库。有没有办法可以确定是否是这种情况,即我可以向垃圾收集器询问有多少引用o1。或者用图形语言说话:o1有多少个传入边?

1 个答案:

答案 0 :(得分:1)

不,你不能向垃圾收集器询问o1有多少引用:.NET不使用引用计数。

基本上你必须自己做所有的图形导航,这可能意味着让你的对象图实现某种访问者算法,并结合你已经检查过的对象缓存。是的,这个 类似于GC会做的事情,但我不相信有任何方法可以挂钩它的处理。 (并且可能存在涉及特殊技巧的边缘情况,其中GC知道某些东西不是垃圾并且无论如何都会忽略它,这不适合您的代码。)