目前,我必须修复一个泄漏了大量内存的现有Silverlight应用程序。使用Redgate's ANT profiler我设法检测到可能出现的问题。其中一个是包含Web服务的静态类,它包含两个事件处理程序以支持异步计算 你已经猜到了......很多对象都会为这个处理程序分配一个事件,但大多数都不会再次发布它。结果,这些对象链接到这些静态事件,因此几乎从未发布过......
我需要一个简单的解决方法来解决这个问题。那么,如果没有这些变化产生很大的影响,我有什么可能的选择来修复这个内存泄漏?
使事件处理程序非静态将导致巨大的变化,从而产生不希望的行动......
答案 0 :(得分:2)
使用Weak Event pattern(不知道是否可以使用SL)。这将允许调用静态方法的更脏的编程模型。
更好的选择是正确订阅/取消订阅事件(同意tomasmcguinness),但这意味着您可以更改调用代码和/或要求消费者更好地开发。
另一种解决方案可以使用异步模式。也许在方法调用中等待一个Callback委托,甚至更好,返回一个Task对象。