堆与管理堆

时间:2010-11-17 22:26:44

标签: memory memory-management heap .net-3.5 working-set

我有一个很大的.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

提前致谢。

2 个答案:

答案 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。