Wpf 查找Windows应用程序的真实内存占用

Wpf 查找Windows应用程序的真实内存占用,wpf,windows,memory,profiler,Wpf,Windows,Memory,Profiler,我的C#/WPF应用程序遇到了一些OutOfMemoryException,在尝试分析内存使用情况时遇到了一些令人困惑的数据 当应用程序正常运行时,Windows任务管理器会将内存使用情况显示为34 MB左右(在创建对象和垃圾收集时会略有反弹)。当我运行诸如和之类的内存分析应用程序时,它们显示的总内存使用量约为1.2MB 为什么会有如此巨大的差异?任务管理器认为这些探查器没有什么 更新:我在应用程序中添加了一些诊断代码,以便每隔一段时间通过Process类打印出各种内存信息 在运行我的应用程序时

我的C#/WPF应用程序遇到了一些OutOfMemoryException,在尝试分析内存使用情况时遇到了一些令人困惑的数据

当应用程序正常运行时,Windows任务管理器会将内存使用情况显示为34 MB左右(在创建对象和垃圾收集时会略有反弹)。当我运行诸如和之类的内存分析应用程序时,它们显示的总内存使用量约为1.2MB

为什么会有如此巨大的差异?任务管理器认为这些探查器没有什么

更新:我在应用程序中添加了一些诊断代码,以便每隔一段时间通过Process类打印出各种内存信息

在运行我的应用程序时,我在中设置了一个规则,以便在发生异常时执行内存转储。我强制了一个异常,内存转储发生了。此时,我的应用程序的内存使用量(如任务管理器所示)从32MB跃升到145MB,并保持不变

您可以在下表(WorkingSet64)中看到此跳转。我仍在尝试理解Process类提供的所有类型的内存信息。外部应用程序如何使我的应用程序的工作集像这样增长


和,这两部分都是由马克·鲁西诺维奇(Mark Russinovich)提出的。

使用这里建议的一些诊断工具,再加上我找到了泄漏的源头(这是一大笔钱)

  • WPF BitmapEffect类可能导致泄漏。替代的“效果”类修复了泄漏
  • XAML合并的资源字典可能导致泄漏
  • 应用程序的“工作集”内存占用(任务管理器显示的内存)不能很好地指示进程的内存占用。外部应用程序可能会影响这一点
    内存分析工具帮助我发现,泄漏主要发生在非托管代码中,这让追踪这些代码非常痛苦。处理这些泄漏,再加上更好地理解Windows内存(私有内存与工作集),这就彻底解决了问题。

    CLR Profiler不会显示非托管内存。进程本身和运行时使用内存。您可以使用vadump查看更具体的内存消耗情况,也可以使用techne/sysinternals中的briljant process explorer查看内存使用率如此低的原因是什么?也许你的问题实际上是内存损坏。我来看看其他分析器,谢谢。应用程序运行的平台是一台只有512MB内存的小型面板电脑。它也是一个基于闪存的硬盘,因此分页被禁用。还有其他应用程序同时运行,所以我正试图全面了解内存使用情况。