.net - 我的内存去哪儿了?大的私有(private)字节数

标签 .net wpf debugging memory-leaks

我有一个 WPF 应用程序,除其他外显示很多图像,大大小小的。
我的问题是该应用程序使用了大量内存,我无法弄清楚它来自哪里。

这种情况下,当强调应用程序时,我会在 perfmon 中得到这个图表:

http://www.imagechicken.com/uploads/1244548604007097000.jpg

大黑线是 Process\Private 字节,其他线是 CLR 内存计数器(粉红色的是总提交字节数)

图中的数字是:
私有(private)字节 ~ 350 Mb
提交的字节 ~ 100 Mb

我一直在使用 WinDbg 和其他工具进行大量研究,它们都报告托管堆栈的行为(!eeheap 报告总托管堆栈约为 100 Mb)

我一直在探索 LeakDiag、LDGrapher 等应用程序,但一无所获。

所以,最后我的问题,我如何继续找出我的内存去向?

即使只是启动应用程序,也使用 100Mb 的提交字节,但 190Mb 的私有(private)字节。

引用文献:

我已经阅读了很多关于此的内容,其中包括一些很棒的网站:

苔丝·费兰德斯:http://blogs.msdn.com/tess/archive/2009/02/27/net-memory-leak-reader-email-are-you-really-leaking-net-memory.aspx

里科·马里亚尼:http://blogs.msdn.com/ricom/archive/2004/12/10/279612.aspx

MSDN 杂志:http://msdn.microsoft.com/en-us/magazine/cc163528.aspx

最佳答案

我在 WPF 应用程序中遇到了类似的问题,并且 used UMDH to track分配 native 内存的位置。 (请注意,set _NT_SYMBOL_PATH 通常有助于从操作系统组件获得良好的堆栈跟踪。

日志显示几乎所有内存都在视频驱动程序中分配。我发现驱动程序已经过时一年多了;我从制造商的网站安装了最新版本并解决了问题。

关于.net - 我的内存去哪儿了?大的私有(private)字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/974091/

相关文章:

c# - 链中的多个后台 worker

c# - WPF 中的 MVVM 模式 - 如何处理我无法控制的模型?

c# - 从 WPF 动画/ Storyboard 中保存视频

c - 函数定义预期错误

c - 没有为指针分配内存,这会导致我在 C 中出现段错误(核心转储)吗?

c# - 如何配置 log4net 以在 Debug模式下打印到控制台

c# - 用于定位 .NET 扩展方法的 Visual Studio 插件?

c# - 嵌套在类中的扩展方法

c# - 当 Dll 位于单独的文件夹中时免注册 COM

wpf - Image.FromHbitmap WPF 等效