我的WPF .net应用程序似乎泄漏内存(我也使用本机和第三方组件)。我进行了一些内存转储,并使用DebugDiag,WinDBG和VMMap分析了这些内存转储。我已经看到托管堆以及本地堆和线程都非常稳定(在低层次上)。然后我用DebugDiag做了一个分析。它表明,到目前为止,大部分是由“虚拟分配”(2.5GB:1.2GB提交和1.2GB保留)分配的。谁在使用我的内存:大量的虚拟分配,但小堆
VMMap显示我的大部分内存是“私人数据”,或者在一个转储甚至是“页面表”中......我怎样才能找出谁负责? (我本来期望管理或本机堆增长)
编辑(让我增加一些额外的计数器):
.NET CLR Memory | # Total committed Bytes 357945K
.NET CLR Memory | # Total reserved Bytes 402554K
.NET CLR Memory | Large Object Heap size 79182K
Process | Private Bytes 1299080K
Process | Virtual Bytes 2876524K
-------------------- Usage SUMMARY --------------------------
TotSize ( KB) Pct(Tots) Pct(Busy) Usage
92d50000 (2405696) : 57.36% 83.79% : RegionUsageIsVAD
50c11000 (1323076) : 31.55% 00.00% : RegionUsageFree
12c6c000 ( 307632) : 07.33% 10.71% : RegionUsageImage
79fe000 ( 124920) : 02.98% 04.35% : RegionUsageStack
0 ( 0) : 00.00% 00.00% : RegionUsageTeb
540000 ( 5376) : 00.13% 00.19% : RegionUsageHeap
1ae5000 ( 27540) : 00.66% 00.96% : RegionUsagePageHeap
0 ( 0) : 00.00% 00.00% : RegionUsagePeb
0 ( 0) : 00.00% 00.00% : RegionUsageProcessParametrs
0 ( 0) : 00.00% 00.00% : RegionUsageEnvironmentBlock
对我来说,最可能的情况是这些是大对象堆中的漏洞,但我真的想花一些时间用你的代码来确认。 – 2012-01-18 17:34:21
请指定.NET版本,AFAIK WPF3.5有一些内存泄漏,在WPF4中修复了 – sll 2012-01-18 17:39:13
我已经检查过LOH。大约80MB。我们使用.net 3.5 SP1(我们无法切换到.net 4),所有修补程序和修复程序都已应用。 – Dunken 2012-01-18 19:07:19