0

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

我需要一个简单的修复来解决这个问题。那么,我必须有哪些可能的选择来修复此内存泄漏,而这些更改不会产生很大影响?

使事件处理程序非静态将导致巨大的变化,因此是不受欢迎的动作......

4

1 回答 1

2

使用弱事件模式(不知道是否可以使用 SL)。这将允许调用静态方法时使用更脏的编程模型。

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

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

于 2012-04-24T08:47:46.603 回答