典型行为: 应用程序开始使用30 MB (私有内存)。然后在模拟重负载下每小时泄漏一些内存,比如说1 MB。这模拟应用程序在线运行数天或数周。
我尝试使用几个工具来跟踪内存泄漏,包括附带Visual Studio CRT库的CRT调试工具。我还使用了一个商业的泄漏检测工具("Memory Validator")。
两者都报告在关闭时有可忽略的内存泄漏(有几个次要条目,加起来只有几KB,我不担心)。此外,在运行时,我可以看到跟踪的内存似乎不那么多(所以我不认为它只是保持并在应用程序退出时释放的内存)。我得到了约5MB的列出内存(总共> 30MB)。
该工具(Memory Validator)被设置为跟踪所有内存使用情况(包括malloc、new、虚拟内存分配和许多其他类型的内存分配)。基本上,已经选择了跟踪哪些内存的每个设置。
.NET映像报告它正在使用约1.5 MB的内存(来自perfmon)。
这是最后一个信息: 我们有一个版本的应用程序,它作为本机控制台应用程序运行(完全本机 - 没有CLR)。这与混合模式相比仅缺少UI部分。这似乎根本不会泄漏内存,并且峰值为约5MB的私有字节。
因此,我想在这里传达的基本上是,我不认为任何本机代码都会泄漏内存。
还有一个谜团: 我发现这篇文章提到了针对2.0框架(我正在使用)的混合模式应用程序中的内存泄漏问题: http://support.microsoft.com/kb/961870
很不幸,细节非常少,所以我不确定它是否相关。我尝试将目标从2.0改为3.5框架,但仍然遇到相同的问题(也许我没有做对)。
有人有任何建议吗?
以下几点可能对我有所帮助:
- 还有其他我没有追踪的内存分配方式吗?
- 为什么数字不符合?我得到了5 MB的CRT内存使用量,1.5 MB的.NET内存使用量,那么为什么整个应用程序使用30MB的私有字节?这全部都与.NET框架有关吗?为什么泄漏工具中看不到它们?.NET框架不会出现在某种分配的内存中吗?
- 还有其他能够与混合模式应用程序良好配合的泄漏检测工具吗?
感谢您的任何帮助。
约翰