にオブジェクトがある非常に複雑なオブジェクトグラフがG
あります。NHibernateを使用してデータベースに書き込まれます。ただし、データベースに(それを呼びましょう)の永続的なエントリがすでに存在する場合は、の代わりに使用します。したがって、データベースに冗長なエントリがあってはなりません。今、私はNHibernateにその仕事を任せ、その後データベースを調べます。今、私は避けようとした状況を正確に持っています。データベースには、元のオブジェクトに加えてのエントリがあります。私がこれまでに持っている唯一の説明は、別のルートを介して到達可能であるということですo1
G
G
o1
o1_p
o1
o1_p
o1_p
o1
o1
G
そのため、hibernateはそれをデータベースに入れます。これが当てはまるかどうかを判断する方法はありますか。つまり、ガベージコレクターに参照がいくつあるかを尋ねることができますかo1
。またはグラフ言語で話す:入力エッジはo1
いくつありますか?
1 に答える
1
いいえ、ガベージコレクターにo1への参照がいくつあるかを尋ねることはできません。.NETは参照カウントを使用しません。
基本的に、すべてのグラフナビゲーションを自分で行う必要があります。これは、オブジェクトグラフに、すでに調べたオブジェクトのキャッシュと組み合わせて、ある種の訪問者アルゴリズムを実装させることを意味します。はい、これはGCが行うことと似ていますが、その処理にフックする方法はないと思います。(そして、GCが何かがゴミではないことを知っていて、とにかくそれを無視する特別なトリックを含むエッジケースがおそらくあります。これはあなたのコードには適していません。)
于 2009-07-03T08:22:43.890 に答える