2009-07-03 6 views
0

私はかなり複雑なオブジェクトグラフGをオブジェクトo1Gに持っています。 GはNHibernateを使用してデータベースに書き込まれます。ただし、すでに永続的なエントリがある場合は、データベースにとしましょう。私はo1_pの代わりにo1を置き換えます。したがって、データベース内に冗長エントリは存在しないはずです。今、私はNHibernateにその仕事をさせ、その後私はデータベースを調べます。今私は避けようとした状況を正確に持っています。オリジナルのo1_pオブジェクトとo1のエントリがデータベースにあります。私が今までに持っていた唯一の説明はGの別のルート経由で到達可能であるため、hibernateはそれをデータベースに入れます。これが当てはまるかどうかを判断する方法はありますか。つまり、ガベージコレクタに参照数がo1であるかどうかを尋ねることができます。またはグラフ言語で話す:o1には何個の受信エッジがありますか?C#でオブジェクトグラフ内でオブジェクトに到達できるかどうかをどのように判断できますか?

答えて

1

いいえ、ガベージコレクタにo1の参照数を問い合わせることはできません。.NETでは参照カウントを使用しません。

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

関連する問題