1

私は設計を行っていますが、ガベージ コレクションが正しく行われるかどうかはわかりません。
私はいくつかの魔法のリンゴを持っていますが、おいしいものもあれば悪いものもあります。

私は辞書を持っています: BasketList = Dictionary <basketID,Basket>
(バスケットのリスト)。

Basketオブジェクトには単一のオブジェクトがあり、Appleそれぞれが objectBasketへの参照を格納しますAppleSeperation。にはと の

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

Basket と in Shops を指すAppleオブジェクトstore と、BasketのApple を指します。BasketsImIn = Dictionary<ID,Basket>

私の質問は、からバスケットを削除し、および/またはBasketListからAppleを削除したことを確認した場合、ガベージコレクションは適切に行われますか、それとも厄介な参照が横たわっていますか?BadApplesYummyApples

4

2 に答える 2

2

あなたがこれについて注意深く考えているのは正しいことです。さまざまな参照を持つことは、ガベージ コレクションだけでなく、アプリケーションの適切な機能にも影響します。

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

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

于 2012-04-20T11:13:04.117 に答える
1

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

上記のリンクから、ガベージコレクションが発生すると...

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

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

于 2012-04-20T11:13:02.650 に答える