C#执行从列表清除事件处理程序中删除对象的操作



我有一个。NET核心后端,带有接受客户端连接的SignalR。在每个连接上,都会创建一个所谓的"调度器",并将其存储在字典中。连接关闭后,此计划程序对象将从列表中删除。

现在,对于这些调度程序对象,我为对象属性设置了一些CollectionChanged处理程序,如下所示:

...
scheduler.Grades.CollectionChanged += (s, e) => this.GradesListener(s, e, connectionId);
scheduler.Raws.CollectionChanged += (s, e) => this.MaterialsListener(s, e, connectionId);
scheduler.Heats.CollectionChanged += (s, e) => this.HeatsListener(s, e, connectionId);
...

因为应用程序中存在内存泄漏,我的问题是:如果我从Dictionary中删除调度程序(我使用Dictionary.Remove(key)执行此操作(,事件侦听器是否也被删除?我会这么认为,因为属性(等级、Raws、Heats…(也会被删除,对吧?

如果处理程序没有自动删除,我将如何"注销"它们?

如果我需要提供更多代码,请告诉我。

如果以前有人问我这样的问题,我很抱歉,我就是找不到答案。

你说得对,在您从Grades、Raws和Heats中删除条目后,GC将很好地清理内存。

问题是,在删除它们之前,this实例无法清理。

你可以在这里找到更多关于如何避免内存泄漏的信息。

最新更新