目前,我必须修复现有的泄漏大量内存的Silverlight应用程序。使用Redgate's ANT profiler我设法检测到可能的问题。其中之一是一个静态类,它封装了一个Web服务,它包含两个事件处理程序来支持异步计算。
你已经猜到了......很多对象都给这个处理程序分配了一个事件,但是大多数对象不会再次释放它。因此,这些对象链接到这些静态事件,因此几乎从未发布...由于事件处理程序而导致内存泄漏
我需要一个简单的修复程序来解决此问题。那么,我有什么可能的选择来解决这个内存泄漏问题,而这些更改没有太大的影响?
使得事件处理非静态将导致巨大的变化,因此不希望的动作......
你可以尝试取消分配事件处理程序,当你不再需要它们? – tomasmcguinness 2012-04-24 08:47:28
@tomasmcguinness:我想这是提供库的典型场景,但是您无法控制调用者的编码质量。但是你是对的,这实际上是最好的解决方案......做一个干净的通话与订阅和取消订阅事件。 – 2012-04-24 08:54:49
取消分配是一个选项,但这个项目是一个大混乱...我没有创造它,但他们期望我执行奇迹。 :-)最大的挑战是找到我可以取消分配的正确位置。用100.000行代码,不包括XAML ... Blimey! – 2012-04-24 09:00:26