2012-04-20 29 views
1

私はデザインがありますが、ガベージコレクションが正しく行われるかどうかはわかりません。
私はいくつかの魔法のりんごを持っていて、いくつかはおいしいです。ガーベッジコレクションと参照C#

私は辞書があります:BasketList = Dictionary <basketID,Basket>
(バスケットのリスト)です。

Basketオブジェクトは、その中に単一AppleBasket格納オブジェクトAppleSeperationへの参照を有します。

AppleSeperationは、2つの辞書、YummyApples = <basketID,Apple>BadApples = Dictionary<basketID,Apple>を保存しているので、リンゴがどこにあるのかがわかります。

AppleオブジェクトストアBasketsImIn = Dictionary<ID,Basket>は、バスケットと店舗、およびApple in Basketを指します。

私はBasketListからバスケットを削除し、私は、ガベージコレクションが適切に起こるのだろう、BadApplesおよび/またはYummyApplesからアップルを削除することを確認した場合に私の質問は、ある、または転がっいくつかの厄介な参照があるでしょうか?

+1

「乱雑な参照」を定義します。ルールは単純です:オブジェクトへの参照がなくなると、GCは最終的にそれを取り除きます。 –

+0

メモリプロファイラで確認するのはどうですか? – Nikolay

+0

なぜ、おいしくない、悪くない各バスケットの中にリンゴを保管していますか?とにかく、BadApplesとYummyApplesが1つのバスケットからのみ参照され、そのバスケットがもはや参照されていない場合、それらは収集されるべきです。 –

答えて

2

あなたはこれについて慎重に考えるべきです。ガベージコレクションだけでなく、アプリケーションの適切な機能にも意味があります。

しかし、あなたが設定したすべての参照を慎重に削除し、参照に保持されている他の自立変数がない限り、ガベージコレクタはその作業を行います。

GCは、参照されていないオブジェクトを収集するのに実際はかなり洗練されています。例えば、互いに参照する2つのオブジェクトを収集することはできますが、アプリケーションには他の「生きた」参照がありません。

+0

ニックピックするには、実際には、参照されているオブジェクトが見つかることはありませんが、到達可能ではないオブジェクトだけが見つかることはありません。それが見つけたものは、ゴミ以外のものとマークされています。 –

+0

@HenkHolterman私のファジー言語が削除されました。私の脳はまだまだ曖昧です。あなたはあなたのニンピクを精緻化することができますか、それとも別の言葉ですか?私は近い理解の感覚を持っています! hehe –

+0

GCは 'roots'のコレクションから始まり、見つかったものすべてをマークします。見つからなかったものはゴミとみなされます。 –

1

ガベージコレクションの基礎については、http://msdn.microsoft.com/en-us/library/ee787088.aspxを参照してください。ガベージコレクションが発生した上記のリンクから、

...

  1. システムが低い物理メモリを持っています。
  2. 管理されたヒープ上の割り当てられたオブジェクトによって使用されるメモリは、許容可能なしきい値を超えています。これは、管理可能なヒープ上で受け入れ可能なメモリー使用量のしきい値を超えたことを意味します。このしきい値は、プロセスの実行中に継続的に調整されます。
  3. GC.Collectメソッドが呼び出されます。ほとんどの場合、このメソッドを呼び出す必要はありません。ガーベッジコレクタは継続的に実行されるためです。このメソッドは、主に固有の状況とテストに使用されます。

クリーンアップを正しく実行している場合は、心配する必要はありません。

+0

@AndrewBarber:それを指摘してくれてありがとう、私はほとんど最後の行を書くことを忘れていた;-) – Nauman

+0

あなたは何かに乗っていたと感じていたが、ちょうど気が散った! hehe –

+0

@AndrewBarber:正直なところ、はい!私はあなたの答えを読んでいたので、今あなたは私の気晴らしの原因を知っています! :D – Nauman