【发布时间】:2012-11-23 12:10:00
【问题描述】:
我有一个发布一些事件的静态类。所以我有很多不同的小类,它们有不同的生命周期来订阅这个事件。
我现在发现这会导致内存“泄漏”,因为订阅类在订阅一个更长寿的事件时会保持活动状态。我知道这是通过使用内存分析器发生的,并且我读到了这个问题。
我无法手动取消订阅,因为我的列表中可能有数百个“客户”。此列表将被清除。所以我不能(也不想)手动取消订阅。
我读到“弱事件模式”在这里可能会有所帮助。有人可以引导我采用一种“简单”的方式来实现这一点吗?到目前为止,我发现要么太简单而无法在实践中使用,要么太复杂以至于一开始就无法理解。
或者这种情况有什么“最佳实践”吗?
提前致谢!
更新: 根据 jbl 的回答,我发现这个(http://blogs.msdn.com/b/greg_schechter/archive/2004/05/27/143605.aspx)是一种可能的解决方案。这里有cmets吗?它相当老了(2004 年),所以可能有更好的解决方案吗?
【问题讨论】:
-
看看这个帖子,Fredric对你的问题的解释真的很有帮助,stackoverflow.com/questions/3662842/…
-
你看过 WPF 中的
WeakEventManager(msdn.microsoft.com/en-us/library/aa970850.aspx) 吗? -
@Dennis:我目前正在使用 WinForms。所以我不是 100% 能够使用 WPF-Stuff。但我会阅读这个主题。谢谢!
-
@chiffre:好吧,
WeakEventManager的使用并不意味着“使用 WPF”,不需要渲染 WPF 控件。 -
@dennis:但我必须参考 WPF 程序集。我不会吗?
标签: c# events memory-leaks event-handling