我正在研究为什么一个托管进程使用了大量的内存。是否有一种方法可以在WinDbg中运行GC.Collect(3)
,以便我可以专注于实际的内存分配?
我正在研究为什么一个托管进程使用了大量的内存。是否有一种方法可以在WinDbg中运行GC.Collect(3)
,以便我可以专注于实际的内存分配?
我认为没有办法从WinDbg运行.NET垃圾回收,但我也认为这并不是必要的。
请参阅Rico Mariani's Performance Tidbits - Tracking down managed memory leaks (how to find a GC leak)以了解有关查找堆上的内容类型的信息。
其他可能有用的链接:
我不相信你可以从WinDbg触发GC。
以下是一些我依赖的有用的内存分配跟踪工具:
WinDBG首先是一个Win32/Kernel调试器。因此,您可能想尝试其中一个托管调试器,例如mDBG。但我曾经为MSFT做过.NET调试支持,而我从未需要类似的工具来解决内存泄漏问题。
嗨,罗杰,希望你的内存泄漏问题现在已经解决了。:-)
首先要确保它是“托管内存泄漏”。也就是说,当您查看性能监视器计数器.NET CLR Memory -># Bytes in all heaps时,与该进程的相同进程的计数器Process -> Private Bytes以相同的速度增加。如果是这样,那么您可以使用上面描述的技术。
如果不是,则可能存在由运行托管代码引起的本机泄漏。我见过的最常见泄漏是与在进程中加载但未卸载的.NET程序集相关的问题。在Perfmon中,这看起来像是本机内存泄漏。
我建议您尝试在DebugDiag中运行一个泄漏规则,并查看内存报告显示的泄漏调用堆栈。
这里还有另一个关于此主题的绝佳资源: 我有内存泄漏!!!我该怎么办?(定义“哪里”)
谢谢, 亚伦