【问题标题】:Memory leaks in wpf C#wpf C#中的内存泄漏
【发布时间】:2011-05-27 15:58:48
【问题描述】:

我正在为DataGridDatePicker 使用 GalaSoft.MvvmLight 套件和 WPF 工具包开发 WPF MVVM(在 v3.5 中)应用程序。但是,每次在MainWindow 中加载UserControl 时,我都会在应用程序中面临大量内存泄漏。我正在尝试通过 Scitech Memory profiler 找到确切的问题,尽管我有一些严重的问题:

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

请帮忙。

【问题讨论】:

    标签: c# .net wpf mvvm memory-leaks


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 2011-11-05
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        相关资源
        最近更新 更多