2011-08-16 20 views
0

クラス1:廃棄インスタンス

 public class FunctionBlocks 
     { 
      List<Hashtable> _htLogicalNodeList; 
      public FunctionBlocks() 
      { 
      _htLogicalNodeList = new List<Hashtable>(); 
      FunctionBlock fb = new FunctionBlock(); 
      fb.AddDODASignalList(new Hashtable);    
      _htLogicalNodeList.Add(fb.LogicalNodeHash);  
      fb = null; 
      }  
     } 

クラス2:私は "_htLogicalNode" を配置するwan'tこの例で

 public class FunctionBlock 
     { 
     Hashtable _htLogicalNode; 

     public FunctionBlock() 
     { 
      _htLogicalNode = new Hashtable(); 
     } 

     public Hashtable LogicalNodeHash 
     { 
      get{return _htLogicalNode;} 
      set{_htLogicalNode = value;} 
     } 

     public void AddDODASignalList(Hashtable doDASignal) 
     { 
      _htLogicalNode.Add(doDASignal); 
     } 
    } 

。 "fb"オブジェクト私はnullとして、EventHough "FunctionBlocks"インスタンスには "_htLogicalNode"参照があります。どのように私は "_htLogicalNode"インスタンスを処分することができます。

答えて

0

「dispose」とはどういう意味ですか? - IDisposableインタフェース/パターンは、本質的である

using (FunctionBlock fb = new FunctionBlock()) 
{ 
    fb.AddDODASignalList(new Hashtable);    
    _htLogicalNodeList.Add(fb.LogicalNodeHash);  
} 

私は処分必要FunctionBlockで何を見ることができない、ので、これを行うことは無意味だろうしかし:あなたはFunctionBlockでは、次を使用することができ、その場合にはIDisposableを実装するかもしれませんあなたがオブジェクトで終わったときにメソッドを呼び出すという豪華な方法です。実装されたDisposeメソッドで何かをしない限り、これは何もしません。

メモリを解放することを意味する場合は、のいずれかを入力する必要はありません。fbをnullに設定する必要はありません)。 fbをスコープから外してガベージコレクタで収集し、使用したメモリをそれ自身の時間に解放します。

fbで使用されているメモリがすぐに解放されないことがあります。これは完全に正常であり、予想されます。あなたがそれをしたいときにガベージコレクタに "そのこと"をさせる方法がありますが、これは非常に悪い練習です。

0

disposeメソッドをオーバーライドしてnullにすることができます。

関連する問題