处理实例

时间:2011-08-16 10:26:02

标签: c# dispose

Class1:

      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:

      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);
        }
     }

在这个例子中,我不想处理“_htLogicalNode”。 “fb”对象我将其设为null,尽管“FunctionBlocks”实例具有“_htLogicalNode”引用。我如何处置“_htLogicalNode”实例。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

覆盖dispose方法,你可以将其设为null

答案 2 :(得分:0)

“处理”是什么意思?您可以FunctionBlock实施IDisposable,在这种情况下,您可以使用以下内容:

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

但是我在FunctionBlock中看不到任何需要处理的内容,因此这样做毫无意义 - IDisposable接口/模式本质上只是一种调用方法的花哨/健壮的方式你完成了一个对象。除非你在实现的Dispose方法中做了一些事情,否则这什么都不做。

如果通过“dispose”表示释放内存,那么答案就是你不需要做任何事情(你甚至不需要将fb设置为null )。只需让fb超出范围,垃圾收集器就会收集它并在自己的时间内释放已用的内存。

您可能会发现fb使用的内存未立即释放 - 这是完全正常的并且可以预期。有一些方法可以强制垃圾收集器在你想要的时候做“它的事情”,但这样做是非常糟糕的做法。