使用ID是可置的
本文关键字:ID 使用 | 更新日期: 2023-09-27 18:34:51
我有一个List<Pupil>
,每次瞳孔对象引发事件时完成。该学生将从List<Pupil>
中删除。瞳孔对象实现了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
吗?我想保存应用程序内存的那些操作的目的。
谢谢!
一次性产品实际上不是为了节省内存,而是为了显式释放非托管资源。对象的堆内存仅由 GC 释放。因此,调用 Dispose
不会删除堆上的对象。
如果未在其他任何地方引用发送方学生,则应调用 Dispose。否则不会。
正常的模式是Pupil
使用其Dispose
程序取消订阅它订阅的任何事件,并可能引发一个Disposed
事件,该事件将通知其他对象他们应该处理他们借给Pupil
供自己使用的任何IDisposable
对象。 如果Finish
应该表现为Disposed
事件,则无需调用sender.Dispose
,因为首先引发事件的全部原因是sender
已经被处理掉了。 话虽如此,Finish
事件处理程序可能应该取消其订阅,而目前它没有。