[英]How can I determine if an object is reachable within an object graph in C#?
我有一個相當復雜的對象圖G
與對象o1
在G
。 使用NHibernate將G
寫入數據庫。 但是,如果數據庫中已經存在o1
的持久項(我們稱其為o1_p
),則用o1
代替o1_p
。 因此,數據庫中不應有多余的條目。 現在,我讓NHibernate完成工作,然后再查看數據庫。 現在,我完全可以避免這種情況。 數據庫中有原始o1_p
對象加o1
條目。 到目前為止,我唯一的解釋是o1
可以通過G
另一條路由到達,因此休眠將其放入數據庫中。 有沒有一種方法可以確定是否是這種情況,即可以問垃圾回收器對o1
引用數是多少? 或用圖形語言說話: o1
有多少個入局邊?
不,您不能問垃圾回收器對o1有多少引用:.NET不使用引用計數。
基本上,您必須自己進行所有圖導航,這可能意味着使您的對象圖實現某種訪問者算法,並結合已經檢查過的對象的緩存。 是的,這是類似於在GC會做,但我不相信有掛接到其處理任何方式。 (並且可能存在一些涉及特殊技巧的極端情況,其中GC知道某些東西不是垃圾,無論如何都會忽略它,這不適合您的代碼。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.