2011-12-15 6 views
0

私は2つのlistを持っています。両方とも同じタイプのオブジェクトを保持しています。それをTypeXとしましょう。ガベージコレクション - 何を期待していますか?

私はTypeXの新しいオブジェクトを作成し、list1にしてlist2Addを使用したいTypeXの新しいオブジェクトを追加したいです。したがって、各リストは実際のオブジェクトへの参照を持ちます。 (私はここにいることを望む)。

次に、オブジェクトを削除したいと思います。 listの両方にRemoveを使用します。したがって、オブジェクトへの参照は削除されました...

しかし、オブジェクト自体はどうなりますか? GCでクリーニングできますか?どういうわけか他のものを取り除くべきですか?

答えて

3

、GCは、他のオブジェクトによって参照されていないすべてのオブジェクトを収集します。

したがって、両方のリストからオブジェクトを削除し、それ以外の場所に保存しないと、最終的にガベージコレクションされます。

+1

他のオブジェクトこのオブジェクトのイベントに登録されても、それは引き続き参照されます。 – Oded

+0

ありがとうございます。シンプルでクリアな:) – Roman

0

短い答えは「はい」です.GCはそれをクリーンアップします。しかし、これをより効率的にしたい場合は、IDisposableインターフェイスをオブジェクトに追加して、GCがそのオブジェクトへの参照がすべて消えたらすぐにオブジェクトを完全に破棄するようにします。簡単に言えば

http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

+5

'IDisposable'はガベージコレクタとは関係ありません。 –

+0

IDisposableインターフェイスは、オブジェクトが管理されていないリソース(ハンドラ、ストリームなど)を使用し、オブジェクトがnullに設定される前にそれらを再度書き換えようとする場合にのみ実装する必要があります。これ以上参照できないオブジェクト –

+0

GCコレクションを改善し、オブジェクトにリソースを持たせたい場合は、IDisposableを使用してファイナンスのキューイングを避けることができます: – Richard

0

オブジェクトへの唯一の参照がこれらのリストにある限り、GCは両方のリストからオブジェクトを削除した後に削除します。

0

オブジェクトへの参照がそれ以上ない場合、GCは必要に応じてオブジェクトを収集します。これは、通常、メモリの圧力が上がるときや、手動で実行するためのヒント(通常はこれを必要としない)を与えたときに発生します。

このリンクは役に立つかもしれ:http://msdn.microsoft.com/en-us/library/ms973837.aspx

0

GCを持つの良いところは、あなたが本当にyour'reが今気に何を心配する必要はないということです。

関連する問題