2

我试图在我们的一个应用程序中找到内存泄漏,但是它非常难以捉摸。

我已经使用 Ants 内存分析器分析了该程序,发现泄漏发生在非托管代码中,而 Ants 内存分析器不适合:http ://www.red-gate.com/supportcenter/content/ANTS_Memory_Profiler/help/ 7.4/amp_unmanaged_use我检查了“图形缓冲区”和“非托管代码中的对象处理问题”部分中的内容,但没有给出任何结果。

然后我使用了 Windows 调试诊断工具并进行了内存压力分析。大部分内存使用在本机堆中:heap 6 0x01ee0000(不是默认进程堆)。虚拟分配摘要内存低,泄漏分析中未完成的分配摘要内存低:没有一个模块具有高内存使用率。

我现在如何找到内存泄漏的位置?

4

2 回答 2

1

内存泄漏诊断是 Microsoft CRT 的内置功能,_CrtDumpMemoryLeaks() 函数提供报告。使用它需要在本机代码中编写单元测试,以便您可以启用调试分配器以使此功能工作。这反过来要求您必须为此非托管代码提供源代码,以便您可以使用<crtdbg.h>头文件启用调试分配器并构建单元测试。基本指南在这里

通常的症结是您无权访问本机源代码。在这种情况下,您需要与此代码的供应商或作者合作以解决此问题。通过向他提供一个演示问题的小型重现项目来让球滚动起来。

于 2012-06-26T12:46:30.143 回答
0

如果您想要一个真正的内存分析器工具,请查看http://memprofiler.com/support.aspx。到目前为止,这是我用过的最好的内存泄漏工具之一。.NET 与各处的非托管代码互操作。仅仅因为泄漏出现在非托管代码中并不意味着您的代码中没有保留引用问题。如果您提供一些您认为存在内存泄漏问题的详细信息以及有关您的解决方案的更多信息,也许我们可以提供更多解决方案。

于 2012-06-26T18:09:55.753 回答