我有一个很大的.NET应用程序,目前正在达到865MB的私有工作集。
所以我运行了VMMap,看到Heap大约是587MB而Managed Heap只有255MB(也是私人工作集)。
让所有这些非托管代码使用如此多的内存(我认为.net运行时正在使用它)是否正常?
注意:我使用了带有SOS扩展名的WinDbg。问题不在于托管堆中的内存消耗,而是“非托管”堆。
VMMap的屏幕截图:http://img687.imageshack.us/img687/1529/vmmap.png
更多信息: 总大小:1487MB 上传:1359MB 私人:931MB 总WS:967MB 私人WS:865MB 免费(大小):609MB
提前致谢。
答案 0 :(得分:0)
是的!非托管对象如果没有正确释放,甚至可能导致更多内存泄漏。我曾经发现obcconnection对象吞噬了一大堆RAM(它试图在一个循环中打开/关闭连接)。这么多,以至于应用程序最终会耗尽内存并崩溃。
你在处理哪些非托管对象?
答案 1 :(得分:0)
使用CLRProfiler(http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&DisplayLang=en)查看堆上的对象。
注意:.NET 2.0版本也适用于.NET 4.0。