Delphi的内存分析工具?

时间:2009-10-16 19:19:43

标签: delphi profiling memory-management

我设置了一个项目并运行它,并在Process Explorer中查看它,结果发现它使用的内存比我想象的多5倍,只是为了启动它。现在,如果我的程序进展太慢,我将它连接到一个分析器并让它告诉我使用了我的所有循环。是否有任何类似的工具我可以将它连接起来并让它告诉我什么在使用我的所有RAM?

4 个答案:

答案 0 :(得分:6)

AQTime也可以提供帮助。

答案 1 :(得分:4)

您在Process Explorer中使用了哪些数据?

Windows中的“内存使用”不是一个简单的主题。几乎每个应用程序都包含某种形式的内存管理器,它试图满足应用程序的内存需求,操作系统对此知之甚少 - 操作系统知道应用程序内存管理器正在使用的内存,但是这与应用程序 实际使用的内容并不总是一样的。

看到这个的一个简单方法是观察任务管理器报告的内存使用情况....启动一个Delphi应用程序,注意它在任务管理器中的“内存使用”。然后将该应用程序最小化到任务栏,您应该看到内存使用量下降。即使再次恢复应用程序也不会导致内存使用率回升到之前的水平。

粗略地说,当你最小化应用程序时,内存管理器会将其作为一个提示,它应该将任何不必要的“已使用”内存返回给操作系统。也就是说,内存管理器用来有效地为您的应用程序提供服务的内存,但是您的应用程序本身并没有实际使用它。

如果系统需要,内存管理器也应该将此内存返回给系统,例如由于内存条件较低。对任务栏“技巧”的最小化只是一种明智的优化 - 因为最小化的应用程序通常不会主动使用,所以现在是自动执行此类“管理”的适当时机。

(这不是“坏事”,在考虑“使用内存”时需要注意的事项)

更糟糕的是,除了内存管理器正在使用但你的应用程序没有使用的内存之外,还有"commit charge"的问题,它不一定会显示为由您的应用程序或它的内存管理器!

在Delphi应用程序中(从Delphi 2006开始),内存管理器是FastMM,它有一个内置工具,可以显示你的应用程序内存使用的内容,如“内部”(或至少使用拥有这样一个工具 - 我暂时没用过它。)

使用它的iirc是一个简单地在你的项目中添加一个单元并在运行时创建一个表单的问题(通过帮助菜单上的一些“仅调试”菜单项,或者你选择的任何机制)然后会给你一个“映射“你的记忆用法。

如果您使用的是早于2006年的Delphi版本,您仍然可以使用FastMM - 它是免费和开源的。只需download it from sourceforge

答案 2 :(得分:0)

AQTime为我们提供了一个惊人的分析工具。它工作得非常好,并且让我们能够找到从未想过的地方的瓶颈,同时有时向我们展示我们确定没有瓶颈。

它与Finalbuilder,Araxis Merge和TestComplete一起,是不可或缺的工具!

答案 3 :(得分:0)

除了其他:在我切换到D2006 +(并开始使用fastmm)之前,我使用了AQTime的免费memproof。它有一些问题,但它是可行的。