防止WPF中的内存泄漏

时间:2011-10-12 08:16:00

标签: c# wpf memory-leaks

使用WinForms使用gdi对象,事件处理程序,本机代码中的对象等后,必须释放内存。

WinForms我曾经在dispose方法中删除了例如事件处理程序。

Wpf中防止内存泄漏的最佳解决方法是什么?是否与使用Winforms的{​​{1}}相同?在Dispose pattern中,我是否必须关心事件处理程序,gdi对象?运行时创建的资源(Wpf等)怎么样?

4 个答案:

答案 0 :(得分:9)

This博客文章列出了导致WPF应用程序内存泄漏的最常见情况。

  • 父窗口中对象的事件处理程序
  • 注册来自静态对象的事件
  • 使用计时器
  • 数据绑定
  • 更改文本框的Text属性

它还描述了如何解决这些常见问题。

另一个好方法是在遵循标准指南的同时开发应用程序,然后使用某种分析器来确定任何内存泄漏或性能瓶颈。

答案 1 :(得分:4)

来自MSDN:任何WPF框架级元素(从FrameworkElement或FrameworkContentElement派生的那些对象)都有三个常见的生命周期事件:Initialized,Loaded和Unloaded。

.....

最后引发

已卸载,并由展示源或可移动的可视父级启动。当引发和处理Unloaded时,作为事件源父元素(由Parent属性确定)或逻辑树或可视树中任何给定元素向上的元素可能已经取消设置,这意味着数据绑定,资源引用和样式可能不能设置为正常或最后已知的运行时值。

答案 2 :(得分:2)

答案 3 :(得分:1)

注意事件:很容易错过任何内容,因为代表的所有引用都将存在,直到代表生活。我建议在可能时使用弱事件模式。实际上,微软在他们的Prism框架中使用它。

http://msdn.microsoft.com/en-us/library/aa970850.aspx

同时查看我在学习WPF http://support.microsoft.com/kb/938416/en-us

时多次被捕获的问题