簡體   English   中英

如何確定對象在C#中的對象圖中是否可訪問?

[英]How can I determine if an object is reachable within an object graph in C#?

我有一個相當復雜的對象圖G與對象o1G 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM