0

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

谢谢!

4

3 回答 3

1

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

于 2012-05-21T08:02:01.910 回答
0

如果发件人瞳孔未在其他任何地方引用,则应调用 Dispose。否则不行。

于 2012-05-21T07:51:25.580 回答
0

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

于 2012-05-21T17:53:52.630 回答