0

にオブジェクトがある非常に複雑なオブジェクトグラフがGあります。NHibernateを使用してデータベースに書き込まれます。ただし、データベースに(それを呼びましょう)の永続的なエントリがすでに存在する場合は、の代わりに使用します。したがって、データベースに冗長なエントリがあってはなりません。今、私はNHibernateにその仕事を任せ、その後データベースを調べます。今、私は避けようとした状況を正確に持っています。データベースには、元のオブジェクトに加えてのエントリがあります。私がこれまでに持っている唯一の説明は、別のルートを介して到達可能であるということですo1GGo1o1_po1o1_po1_po1o1Gそのため、hibernateはそれをデータベースに入れます。これが当てはまるかどうかを判断する方法はありますか。つまり、ガベージコレクターに参照がいくつあるかを尋ねることができますかo1。またはグラフ言語で話す:入力エッジはo1いくつありますか?

4

1 に答える 1

1

いいえ、ガベージコレクターにo1への参照がいくつあるかを尋ねることはできません。.NETは参照カウントを使用しません。

基本的に、すべてのグラフナビゲーションを自分で行う必要があります。これは、オブジェクトグラフに、すでに調べたオブジェクトのキャッシュと組み合わせて、ある種の訪問者アルゴリズムを実装させることを意味します。はい、これGCが行うことと似ていますが、その処理にフックする方法はないと思います。(そして、GCが何かがゴミではないことを知っていて、とにかくそれを無視する特別なトリックを含むエッジケースがおそらくあります。これはあなたのコードには適していません。)

于 2009-07-03T08:22:43.890 に答える