【发布时间】:2012-02-13 10:27:27
【问题描述】:
我的 WPF .net 应用程序似乎泄漏了内存(我也使用本机和 3rd 方组件)。我进行了一些内存转储,并使用 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
【问题讨论】:
-
对我来说最可能的情况是这些是大对象堆中的漏洞,但我实际上想花一些时间来确认您的代码。
-
请指定 .NET 版本,AFAIK WPF3.5 有一些内存泄漏,已在 WPF4 中修复
-
我已经检查了 LOH。大约 80MB。我们使用 .net 3.5 SP1(我们无法切换到 .net 4),应用了所有补丁和修复。
标签: c# wpf memory memory-leaks