2016-06-16 9 views
0

cバックグラウンドから、私はC#のメモリ管理に関する質問があります。私のクラスの一つは、マップされたクラスのコンテナを保持している:コンテナがクリアされたときにインスタンスによって占有されたメモリは解放されますか?

public class B 
{ 
    // some data members, constructors, etc... 
} 

public class A { 

    Dictionary<string, B>() m_dictionary; 

    // other data members 

    public A() { m_dictionary = new Dictionary<string, B>(); } 

    // more methods, etc. 

    public void clearDictionary() { m_dictionary.clear(); } 
} 

私はclearDictionary()が呼び出されると、ガベージコレクタは、最終的に彼らがない限り、内部の住んでいたBのすべてのそれらのインスタンスによって占められたメモリを解放することを理解し他のどこかで参照されます。メモリが解放されることを確認するために追加チェックを行う必要がありますか?ありがとう

答えて

1

オブジェクトへの参照がなくなるとオブジェクトが収集されます。 m_dictionary.clear()への呼び出しによって、辞書にあるBのインスタンスへの参照が削除され、そのインスタンスの参照が他の場所にない場合、そのインスタンスはコレクションに適格になります。

関連する問題