由于事件处理程序导致内存泄漏

时间:2012-04-24 08:46:06

标签: c#-4.0 silverlight-4.0 memory-leaks

目前,我必须修复一个泄漏了大量内存的现有Silverlight应用程序。使用Redgate's ANT profiler我设法检测到可能出现的问题。其中一个是包含Web服务的静态类,它包含两个事件处理程序以支持异步计算 你已经猜到了......很多对象都会为这个处理程序分配一个事件,但大多数都不会再次发布它。结果,这些对象链接到这些静态事件,因此几乎从未发布过......

我需要一个简单的解决方法来解决这个问题。那么,如果没有这些变化产生很大的影响,我有什么可能的选择来修复这个内存泄漏?

使事件处理程序非静态将导致巨大的变化,从而产生不希望的行动......

1 个答案:

答案 0 :(得分:2)

使用Weak Event pattern(不知道是否可以使用SL)。这将允许调用静态方法的更脏的编程模型。

更好的选择是正确订阅/取消订阅事件(同意tomasmcguinness),但这意味着您可以更改调用代码和/或要求消费者更好地开发。

另一种解决方案可以使用异步模式。也许在方法调用中等待一个Callback委托,甚至更好,返回一个Task对象。