2010-11-17 59 views
3

我有一个大的.NET应用程序,目前正在打造一个865MB的私人工作集大小。堆vs托管堆

所以我跑了VMMap,看到Heap大约是587MB,Managed Heap只有255MB(也是私人工作集)。

所有这些非托管代码使用如此多的内存(我认为它正在被.net运行时使用)是正常吗?

注意:我用WinDbg的SOS扩展名。问题不在于托管堆中的内存消耗,而是“非托管”堆。的VMMap的

截图:http://img687.imageshack.us/img687/1529/vmmap.png

更多信息: 总大小:1487MB COMMITED:1359MB 个人:931MB 总WS:967MB 私人WS:865MB 免费(尺码):609MB

提前致谢。

回答

0

是的!非托管对象如果没有正确释放,甚至会导致更多的内存泄漏。我曾经发现obcconnection对象吃了RAM的演出(它试图在循环中打开/关闭连接)。以至于应用程序最终会失去内存并崩溃。

你在处理什么非托管对象?

0

使用CLRProfiler(http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&DisplayLang=en)查看堆上有什么对象。

注意:.NET 2.0版本也适用于.NET 4.0。

+1

仅供参考,.NET 3.5使用CLR 2.0 - 它是4.0更新它 – 2010-11-17 22:36:55

+0

也许更轻量级和快速启动是SOS http://msdn.microsoft.com/en-us/library/bb190764.aspx – user44298 2010-11-17 22:37:34

+0

@Richard谢谢,编辑。 – Nick 2010-11-17 22:38:55