2012-05-21 24 views
0

我有一個List<Pupil>和每次瞳孔對象引發事件完成。該學生將從List<Pupil>中刪除。瞳孔對象實現了一個IDisposable接口。使用IDisposable

完成事件。

private void pupil_Finish(Pupilsender) 
    { 
     lock (this.pupilList) 
     { 
      if (this.pupilList.Contains(sender)) 
      { 
       this.pupilList.Remove(sender); 

       sender.Dispose(); 
      } 
     } 
    } 

所以,調用該方法this.pupilList.Remove(sender)後,我應該使用sender.Dispose?我想要保存應用程序內存的那些操作的目的。

謝謝!

+0

爲什麼它首先實現'IDisposable'?你有沒有非託管內存釋放? – BradleyDotNET

回答

0

如果發件人瞳孔沒有在其他地方引用,則應該調用Dispose。否則不是。

+0

那麼方法pupilList.Remove()是否配置了瞳孔對象? –

+0

編號pupilList.Remove()與pupil.Dispose()無關。如果您的瞳孔對象在觸發「完成」事件後沒有用處,則應在事件調用後立即調用Dispose,但不要在事件處理期間調用Dispose。 – deerchao

1

一次性使用實際上並不是爲了節省內存,而是爲了明確釋放非託管資源。對象的堆內存僅由GC釋放。因此調用Dispose不會刪除堆中的對象。

0

正常的模式是爲Pupil使用其Dispose規程,從它訂閱任何事件退訂,並可能提出一個Disposed事件,這會通知他們應該採取任何IDisposable對象他們必須照顧其他對象借出Pupil供自己使用。如果Finish應該表現爲Disposed事件,則無需調用sender.Dispose,因爲事件首先發生的全部原因是sender已被丟棄。話雖如此,Finish事件處理程序應該可能取消它的訂閱,目前它不。