使用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吗?我想保存应用程序内存的那些操作的目的。

谢谢!

使用ID是可置的

一次性产品实际上不是为了节省内存,而是为了显式释放非托管资源。对象的堆内存仅由 GC 释放。因此,调用 Dispose 不会删除堆上的对象。

如果未在其他任何地方引用发送方学生,则应调用 Dispose。否则不会。

正常的模式是Pupil使用其Dispose程序取消订阅它订阅的任何事件,并可能引发一个Disposed事件,该事件将通知其他对象他们应该处理他们借给Pupil供自己使用的任何IDisposable对象。 如果Finish应该表现为Disposed事件,则无需调用sender.Dispose,因为首先引发事件的全部原因是sender已经被处理掉了。 话虽如此,Finish事件处理程序可能应该取消其订阅,而目前它没有。