防止WPF中的内存泄漏
使用WinForms
您必须在使用gdi对象,事件处理程序,本机代码中的对象等后释放内存。
在WinForms
我曾经在dispose方法中删除了例如事件处理程序。
防止Wpf
内存泄漏的最佳解决方法是什么? 它与使用Dispose pattern
Winforms
的相同吗? 总之,我是否必须关心Wpf
事件处理程序,gdi对象? 运行时创建的资源( Brushes
等)怎么样?
此博客文章列出了导致WPF应用程序内存泄漏的最常见情况。
- 父窗口中对象的事件处理程序
- 从静态对象注册事件
- 使用计时器
- 数据绑定
- 更改文本框的Text属性
它还描述了如何解决这些常见问题。
另一个好方法是在遵循标准准则的同时开发应用程序,然后使用某种分析器来确定任何内存泄漏或性能瓶颈。
从MSDN :任何WPF框架级元素(从FrameworkElement或FrameworkContentElement派生的那些对象)都有三个常见的生命周期事件:Initialized,Loaded和Unloaded。
…..
最后引发了Unloaded ,并由显示源或被删除的可视父级启动。 当引发和处理Unloaded时,作为事件源父元素(由Parent属性确定)或逻辑树或可视树中任何给定元素向上的元素可能已经取消设置,这意味着数据绑定,资源引用和样式可能不能设置为正常或上次已知的运行时值。
WPF资源字典泄漏的一些有用链接:
- DynamicResource \ StaticResource导致内存泄漏
- ResourceDictionary和MergedDictionaries的内存泄漏问题
注意事件:很容易错过一些东西,因为代表的所有引用都将存在,直到代表生活。 我建议尽可能使用弱事件模式。 实际上,微软在他们的Prism框架中使用它。
http://msdn.microsoft.com/en-us/library/aa970850.aspx
还要查看我在学习WPF时多次遇到的问题http://support.microsoft.com/kb/938416/en-us