簡體   English   中英

處置實例

[英]Dispose instance

第一類:

      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” object 我已將其設為 null,盡管“FunctionBlocks”實例具有“_htLogicalNode”引用。 我如何處理“_htLogicalNode”實例。

覆蓋 dispose 方法,您可以將其設置為 null

“處置”是什么意思? 您可以讓FunctionBlock實現IDisposable在這種情況下,您可以使用以下內容:

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

但是,我在FunctionBlock中看不到任何需要處理的內容,因此這樣做毫無意義 - IDisposable接口/模式本質上只是在完成 object 后調用方法的一種奇特/穩健的方式。 除非您在已實現的Dispose方法中執行某些操作,否則這不會執行任何操作。

如果通過“處置”你的意思是釋放 memory 那么答案是你不需要做任何事情(你甚至不需要將fb設置為 null)。 只需讓fb go 離開 scope,垃圾收集器就會收集它並在自己的時間釋放使用過的 memory。

您可能會發現fb使用的 memory 沒有立即釋放 - 這是完全正常的,也是意料之中的。 有一些方法可以強迫垃圾收集器在你想要的時候做“它的事情”,但這樣做是非常糟糕的做法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM