据我了解,C# 中内存泄漏的主要原因之一是在处置其容器时未能取消注册事件侦听器。出于这个原因,每当我手动注册一个事件 - 例如 a Timer.Elapsed += ...
- 我确保Timer.Elapsed -= ...
当我完成对象(或父对象)时。
然而,我只是在查看一个 Windows 窗体设计器生成的类,并注意到虽然它很高兴地订阅了事件(例如this.button1.Click += new System.EventHandler(this.button1_Click);
),但似乎除了默认操作之外没有任何清理过程components.Dispose();
。
这是否意味着Dispose()
每个组件的方法都应该取消注册/取消订阅任何已绑定到它的事件?如果是这样,组件如何从它不知道的“外部”事件处理程序中注销,这是否意味着手动尝试从标准 [IDisposable] Windows 控件(计时器、按钮、表单等)中删除事件侦听器通常是不必要?
谢谢