我的C#应用程序占用了太多的工作集内存,我想查看在工作集内存中存在的对象。为了回答这个问题,我转储了进程并创建了一个转储文件。
如何使用转储文件诊断内存泄漏?
但是,当我输入命令“.loadby sos clr”时,Windbg无法加载CLR,因此我无法从Windbg调试文件。而且命令“! dumpheap -stat”和“! threads”也显示“未找到导出线程”。请告诉我一种调试此转储文件并找到对象的方法。请提供一个除VS2013 Ultimate之外的解决方案。
你的目标框架是什么?
.loadby sos clr
.loadby sos mscorwks
.load psscor4
然后执行命令从Microsoft服务器下载符号(如果需要),确保您有网络连接:
!symfix
!dumpheap -stat
查看总体内存使用情况(iu表示包括未根对象):
!heapstat -iu
您还可以使用VMMap工具来查看进程的总体内存使用情况(而不是内存转储),以了解托管堆消耗了多少内存。
您需要使用命令".load _FULL_SOS_DLL_PATH_"而不是".loadby sos clr"来加载SOS.DLL,因为通常安装了不同的.NET框架,所以您需要指示WinDbg加载正确的框架...
除了WinDbg之外,你可以使用的另一个程序——Debug Diagnostics Tool(来自MSDN),对于初次使用者来说要容易得多:http://www.microsoft.com/en-us/download/details.aspx?id=40336。
当我在使用它时,我只需右键单击任务管理器中的进程并创建一个转储文件。