我正在调查我们的C#/WPF/.NET 4.51应用程序可能存在的内存泄漏问题。
我在启动应用程序后立即拍摄了快照,并在分配的内存超过顶部后几个小时再次拍摄了快照。
我使用VisualStudio的进程转储工具检查了托管堆实例。一切看起来完全正常。
在WinDbg中打开转储似乎证实了这一点,因为堆和栈是按我预期的方式增长的(+50MB) (左: 第一个转储,右: 最后一个转储):
让我感到困惑的是已提交页面的大小大量增加(左: 第一个转储,右: 最后一个转储):
此外,VMMap显示了这个巨大的已提交块作为“私有数据”(与上面的转储无关。该屏幕截图是大约一个小时后拍摄的):
请纠正我:
由于堆没问题,并且私有字节是直接使用VirtualAlloc()分配的,因此我可以将“我们”的托管应用程序代码从可能泄漏的候选列表中排除。
有没有办法缩小泄漏原因的范围?
我在启动应用程序后立即拍摄了快照,并在分配的内存超过顶部后几个小时再次拍摄了快照。
我使用VisualStudio的进程转储工具检查了托管堆实例。一切看起来完全正常。
在WinDbg中打开转储似乎证实了这一点,因为堆和栈是按我预期的方式增长的(+50MB) (左: 第一个转储,右: 最后一个转储):
![WinDbg Heap/Stack](https://istack.dev59.com/CK2Pu.webp)
![WinDbg State summary](https://istack.dev59.com/d0rNt.webp)
此外,VMMap显示了这个巨大的已提交块作为“私有数据”(与上面的转储无关。该屏幕截图是大约一个小时后拍摄的):
![VMMap image](https://istack.dev59.com/vBegw.webp)
有没有办法缩小泄漏原因的范围?