3

我有一个大型 .NET 应用程序,它目前正在达到 865MB 的私有工作集大小。

所以我运行了 VMMap,发现堆大约 587MB,托管堆只有 255MB(也是私有工作集)。

让所有这些非托管代码使用这么多内存(我想.net运行时正在使用)是否正常?

注意:我使用了带有 SOS 扩展的 WinDbg。问题不是托管堆中的内存消耗,而是“非托管”堆。

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

更多信息: 总大小:1487MB 已提交:1359MB 私有:931MB 总 WS:967MB 私有 WS:865MB 免费(大小):609MB

提前致谢。

4

2 回答 2

0

是的!如果未正确释放非托管对象,甚至会导致更多内存泄漏。我曾经发现 obcconnection 对象会占用大量 RAM(它试图在循环中打开/关闭连接)。如此之多,以至于该应用程序最终会耗尽内存并崩溃。

您正在处理哪些非托管对象?

于 2010-11-17T22:30:46.227 回答
0

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

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

于 2010-11-17T22:34:27.243 回答