Delphi的内存分析工具?
Posted
技术标签:
【中文标题】Delphi的内存分析工具?【英文标题】:Memory profiling tool for Delphi? 【发布时间】:2009-10-16 19:19:42 【问题描述】:我设置了一个项目并运行它,然后在 Process Explorer 中查看它,结果发现它使用的 RAM 比我想象的要多 5 倍,只是为了启动。现在,如果我的程序运行速度太慢,我将它连接到分析器并让它告诉我什么正在使用我的所有周期。是否有任何类似的工具可以连接到它并告诉我什么在使用我的所有 RAM?
【问题讨论】:
看到这个链接***.com/questions/291631/… ? 首先,忘记进程资源管理器,并使用 getheapstatus 从程序内部获取信息。它更可靠 【参考方案1】:AQTime 也可以提供帮助。
【讨论】:
【参考方案2】:您在 Process Explorer 中使用了哪些数字?
Windows 中的“内存使用”不是一个简单的话题。几乎每个应用程序都包含某种形式的内存管理器,试图满足应用程序的内存需求,而操作系统对此知之甚少——操作系统知道应用程序内存管理器正在使用什么内存,但是这与您的应用程序实际使用的东西并不总是一回事。
查看这一点的一个简单方法是查看任务管理器报告的内存使用情况...。启动一个 Delphi 应用程序,注意它是任务管理器中的“内存使用情况”。然后将该应用程序最小化到任务栏,您应该会看到内存使用量下降。即使再次恢复应用程序也不会导致内存使用回升到之前的水平。
粗略地说,当您最小化应用程序时,内存管理器会将此作为提示,它应该将任何不必要的“使用”内存返回给操作系统。也就是说,内存管理器用于有效地为您的应用程序提供服务但您的应用程序本身并未实际使用的内存。
如果系统需要它,内存管理器也应该将这个内存返回给系统,例如由于内存不足的情况。最小化到任务栏的“技巧”只是一个明智的优化——因为最小化的应用程序通常不会在积极地使用它,这是自动执行这种“内务管理”的好时机。
(这不是“坏事”,只是在考虑“内存使用”时需要注意)
更糟糕的是,除了内存管理器正在使用但您的应用程序没有使用的内存之外,还有"commit charge" 的问题,它不一定显示为您的任何一方使用的内存应用程序或它的内存管理器!
在 Delphi 应用程序中(从 Delphi 2006 起),内存管理器是 FastMM,它有一个内置工具,可以从“内部”(或至少 使用 拥有这样的工具 - 我已经有一段时间没有使用它了)。
iirc 使用它是一个简单的问题,只需将一个单元添加到您的项目并在运行时创建一个表单(通过帮助菜单上的一些“仅调试”菜单项,或您选择的任何机制),然后会给您一个“内存使用情况的地图。
如果您使用的是早于 2006 年的 Delphi 版本,您仍然可以使用 FastMM - 它是免费且开源的。只是download it from sourceforge。
【讨论】:
【参考方案3】:AQTime 对我们来说是一个了不起的分析工具。它工作得非常好,让我们能够在从未想过的地方查明瓶颈,同时有时向我们展示我们确信存在的地方没有瓶颈。
它是与 Finalbuilder、Araxis Merge 和 TestComplete 一起不可或缺的工具!
【讨论】:
但是...请参阅:“为什么 CharInSet 比 Case 语句更快”***.com/questions/332948/…【参考方案4】:除其他外:在我切换到 D2006+(并开始使用 fastmm)之前,我使用了 AQTime 的免费 memproof。它有一些问题,但它是可行的。
【讨论】:
以上是关于Delphi的内存分析工具?的主要内容,如果未能解决你的问题,请参考以下文章