我在混合模式C++/CLR .NET应用程序中遇到内存泄漏缓慢的问题。混合模式C++/CLR应用程序中的内存泄漏
(链接到VS2008 C++/CLR的Windows窗体应用程序与 “/ CLR” 编译器设置它的C++原生静态库)
典型行为:应用程序开始使用30 MB(专用内存)。然后泄漏内存速度缓慢,例如在模拟重负载下运行时每小时一个MB。这模拟了应用程序在几天或几周内正在运行。
我一直在使用一些工具来跟踪内存泄漏既包括随Visual Studio的CRT库的CRT调试的东西尝试。我还使用了商业泄漏检测工具(“Memory Validator”)。
两个报告在关机时可忽略不计的内存泄漏(我不是担心一些小的条目数量到几KB)。另外,我可以看到在运行时,跟踪的内存看起来不那么重要(所以我不相信这只是内存,只在应用程序退出时释放)。我获得了大约5 MB的上市内存(总数> 30MB)。
所述的工具(存储器验证器)是设置跟踪所有的内存使用情况(包括malloc的,新的,虚拟存储器分配和一大堆其它类型的存储器分配的)。基本上,每个设置的内存来跟踪已被选中。
在.NET图像报告它周围使用1.5 MB的存储器(从性能监视器)。
这里是信息的最后一点:我们有一个版本,它运行作为本地控制台应用程序应用程序的(纯天然 - 不CLR在所有)。除了没有UI的东西外,这与混合模式的95%相同。这似乎并没有泄漏内存,并在专用字节大约5MB处出现峰值。
所以基本上我试图让人们在这里要说的是,我不认为任何本地代码的泄漏内存。
另一块拼图:我发现这个目标2.0框架(对此我),当是指内存泄漏在混合模式下的应用:http://support.microsoft.com/kb/961870
不幸的是,细节僵硬稀疏,所以我不知道这是相关的。我确实尝试了针对3.5框架而不是2.0,但仍然有同样的问题(也许我没有这样做)。
任何人有任何建议吗?
几件事情,可能会帮助我:
- 是否有任何其他种类的,我不是跟踪内存分配的?
- 这些数字如何不加起来?我获得了5 MB的CRT内存使用量,1.5 MB的.NET内存,那么整个应用程序如何使用30 MB专用字节?这一切都绑在.NET框架?为什么我没有看到这些泄漏工具? .NET框架不会显示为某种分配的内存吗?
- 任何其他泄漏检测工具,适用于混合模式应用程序?
感谢所有帮助
约翰
.NET 2.0和.NET 3.5都使用相同的CLR 2.0,因为您可以从版本号轻松看到;-) – 2009-07-16 07:29:20