【问题标题】:How can I determine if an object is reachable within an object graph in C#?如何确定在 C# 中的对象图中是否可以访问对象?
【发布时间】:2009-07-03 08:18:46
【问题描述】:

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

【问题讨论】:

    标签: c# nhibernate reference-counting


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多