2011-05-27 122 views
2

我正在开发一个使用GalaSoft.MvvmLight套件和WPF工具包的WPF MVVM(v3.5)应用程序,用于DataGridDatePicker。但是,我每次在MainWindow中加载UserControl时,我都会在应用程序中遇到大量内存泄漏。我想获得通过赛特存储器剖析确切的问题,虽然我有一些严肃的问题:wpf中的内存泄漏C#

  1. 如何解开/解除绑定的VM的EventRelayCommand
  2. mscorlib和PresentationFramework也消耗大量的内存,其中大部分是strings。我不知道他们来自哪里。

请帮忙。

回答

2

你确定这些是内存泄漏吗?你是否正确使用探查器?要确认您有内存泄漏,您必须必须运行垃圾回收器,以便删除不是由堆栈引用的所有对象。运行垃圾回收器后,检查堆内存是否应该收集对象。

E.g.在您的应用程序中,打开一个视图或文档,关闭它,垃圾收集器,然后检查它是否已被删除。

3

看一看这些文章就知道在WPF内存泄漏的原因,有解决方案,以及如何找到它们 -

查找内存泄漏在WPF基于 应用:

http://blogs.msdn.com/b/jgoldb/archive/2008/02/04/finding-memory-leaks-in-wpf-based-applications.aspx

内存泄漏在WPF应用程序:

http://svetoslavsavov.blogspot.com/2010/05/memory-leaks-in-wpf-applications.html

在WPF

查找托管内存泄漏和Silverlight应用程序:

http://blogs.msdn.com/b/wpftesting/archive/2009/03/21/finding-managed-memory-leaks-in-wpf-and-silverlight-applications.aspx

如果您正在使用WPF 3.5 SP1,看看这些补丁程序 -

内存用于WPF 3.5 SP1的泄漏修补程序

http://blogs.msdn.com/b/jgoldb/archive/2010/06/14/memory-leak-hotfixes-for-wpf-3-5-sp1.aspx

一些更罕见的情况下导致内存泄漏 -

http://blog.ramondeklein.nl/?p=58

http://code.logos.com/blog/2008/10/detecting_bindings_that_should_be_onetime.html

+0

尝试:http://www.deleaker.com/ – 2011-12-27 21:21:51