Memory 堆与托管堆

Memory 堆与托管堆,memory,memory-management,heap,.net-3.5,working-set,Memory,Memory Management,Heap,.net 3.5,Working Set,我有一个大的.NET应用程序,目前它的私有工作集大小为865MB 所以我运行了VMMap,看到堆大约是587MB,托管堆只有255MB(也是私有工作集) 让所有这些非托管代码使用如此多的内存(我认为是.net运行时使用的内存)是正常的吗 注意:我已将WinDbg与SOS扩展一起使用。问题不在于托管堆中的内存消耗,而在于“非托管”堆 VMMap的屏幕截图: 更多信息: 总大小:1487MB 提交:1359MB 私人电话:931MB 总数:967MB 专用WS:865MB 免费(大小):609MB

我有一个大的.NET应用程序,目前它的私有工作集大小为865MB

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

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

注意:我已将WinDbg与SOS扩展一起使用。问题不在于托管堆中的内存消耗,而在于“非托管”堆

VMMap的屏幕截图:

更多信息: 总大小:1487MB 提交:1359MB 私人电话:931MB 总数:967MB 专用WS:865MB 免费(大小):609MB


提前谢谢。

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

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

使用CLRProfiler()查看堆上有哪些对象


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

可能更轻量级和快速启动的是SOS,实际上我认为这不会有多大帮助,因为我已经在WinDbg中分析了托管堆中的CLR对象,而且一切看起来都很好。