wpf C#中的内存泄漏

我正在使用GalaSoft.MvvmLight套件和WPF Toolkit for DataGridDatePicker开发WPF MVVM(在v3.5中)应用程序。 但是,每次在MainWindow加载UserControl时,我都会在应用程序中遇到大量内存泄漏。 我试图通过Scitech Memory Profiler获得确切的问题,尽管我有一些严肃的问题:

  1. 如何从VM中的Event取消挂钩/取消绑定RelayCommand
  2. mscorlib和PresentationFramework也消耗大量内存,其中大部分都是strings 。 我不知道他们来自哪里。

请帮忙。

看看这些文章,了解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

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

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