54

我最近从 Delphi 4 升级到 Delphi 2009。在 Delphi 4 中,我一直使用Primoz Gabrijelcic 的 GpProfile作为分析器,使用 Turbo Power 的 Memory Sleuth进行内存分析和泄漏调试。两者都对我很有效。但我现在需要可以与 Delphi 2009 配合使用的新工具。

Delphi 的分析/分析工具的领先者显然是 AutomatedQA 的 AQTime。他们最近甚至收购了Atanas Soyanov 的 Memproof,我认为这是一款出色的免费内存分析工具,并将其功能整合到 AQTime 中。但是 AQTime 对于单个程序员来说是非常昂贵的。它的成本实际上超过了升级到 Delphi 2009 的成本!

所以我的问题是:在您满意并推荐的当前版本的 Delphi 中,是否还有其他更便宜的选项来进行分析和内存分析,或者我应该硬着头皮为 AQTime 支付大笔费用?


附录:似乎早期的回答者表明 Delphi 中已经包含的 FastMM 管理器非常适合查找内存泄漏。

那么,源代码分析有什么好的替代方案吗?

我很好奇的是Michael Adolph 的 ProDelphi,它的成本不到 AQTime 的六分之一。你用它吗?AQTime值得付出六倍的代价吗?


附录 2:我下载了 AQTime 和 ProDelphi 的试用版。

AQTime 一开始有点不知所措,有点混乱。花了几个小时才找到连接它所需的一些技巧。

ProDelphi 非常像我习惯的 GpProfile。但它的窗口杂乱无章,不如 GpProfile 好。

对我来说,最大的区别似乎是:

  1. ProDelphi 更改您的代码。AQTime 没有。如果出现问题,更改代码可能会损坏您的数据,但我对 GpProfile 的经验是它从未发生在我身上。AQTime 加一。

  2. ProDelphi 要求您关闭优化。但是你想要分析的是你的程序优化,它将运行的方式。AQTime 加一。

  3. ProDelphi 只能剖析到函数或过程。AQTime 可以细分到单独的行。AQTime 加 2。

  4. ProDelphi 有一个免费版本,可以分析 20 个例程,其专业版的价格不到 100 美元。AQTime 是 600 美元。加 4 ProDelphi。

现在比分是4-4。你怎么看?


附录 3:Primoz Gabrijelcic 计划让 GpProfile 再次工作。请参阅他对以下一些回复的评论。他在 StackOverflow 上担任Gabr


附录 4:似乎毕竟可能有探查器解决方案。请参阅Andre 的开源 asmprofiler,如下所述

4

12 回答 12

35

就价格而言,您无法击败 FastMM4 作为内存跟踪器。它使用简单但功能强大且与 Delphi 完美集成。
我想您知道,无需下载、安装或更改任何其他内容,只需输入此行

ReportMemoryLeaksOnShutDown := True;

在代码中的任何位置,都将启用内存泄漏的基本报告。
如果您需要更多类似崩溃信息,EurekaLog 是我们使用的一个非常好的产品。MadExcept 也有很好的声誉......

具体来说,我们有 AQTime。

至于 gpProfile,您可以尝试在 SO 上对gabr进行错误更新......或者自己去更新 gpProfile,因为它是开源的。;-)

于 2008-11-15T02:46:59.237 回答
33

我为 Delphi 制作了一个开源分析器: http ://code.google.com/p/asmprofiler/

它并不完美,但它是免费和开源的:-)。

我这样做的主要原因是因为我错过了一个确切的调用树。例如,ProDelphi 仅存储所有调用的摘要和总计数,您无法查看在特定时间(或持续时间)执行特定过程的调用。它有一个时间表,因此您可以看到通话时长如何随时间变化。

于 2009-03-23T08:32:32.840 回答
24

还可以看看Eric Grange 的 Sampling Profiler

于 2008-11-16T07:06:30.850 回答
8

我对 AQtime 的分析非常满意。

于 2008-11-15T02:04:12.473 回答
4

在使用了 GpProfile 和 AQTime 之后,我发现两者都可以有效地找出导致瓶颈的方法调用。

然而,AQTime 也可以告诉我是哪一行代码导致了这种情况,而无需对我的源代码进行任何更改(尽管它最适合 TD32 调试和调试 dcus)。

我最近用它来加速一个例程大约 30 倍(由于内部库函数使用不当)

但是我不必自己付钱!

于 2008-11-17T02:43:14.797 回答
3

我们使用 AQTime Pro 并对此感到满意。Smartbear 最近发布了完全免费的AQTime 标准版。大多数功能仍然存在,但它们当然已经删除了一些

于 2011-07-08T06:53:11.690 回答
2

我同意你对 ProDelphi 界面的看法,但它做得足够好,我们很乐意继续使用它。当我们遇到严重的性能问题时,我们只需要偶尔进行分析,它总是可以帮助我们很快找到问题。物超所值,迈克尔似乎很乐意为新版本保持更新。

我建议的一件事是,因为它确实需要插入代码,所以在某种 VCS 中拥有所有相关代码是非常宝贵的。当我们需要分析时,我们:

  • 检查所有相关文件
  • 全部检查
  • 做我们需要的分析,然后
  • 取消所有结帐,有效地回滚到我们原来的位置。
于 2008-11-16T10:42:11.320 回答
2

有人在 Delphi Area 尝试过 Profiler 组件吗?它是带有源代码的免费软件,它的文章说:

如果您正在寻找一种简单而准确的免费测量代码执行时间的方法,那么 TProfiler 就是您所需要的。TProfiler 是一个非可视化的调试组件,可让您在代码中创建命名计时器。

TProfiler 的每个定时器都提供以下信息:

定时器被激活的次数(Hit Count) 总执行时间 每次命中的平均执行时间 第一次命中的执行时间 最后一次命中的执行时间 执行时间最短的命中 执行时间最长的命中

于 2008-11-20T01:27:11.157 回答
1

这是真的,对于分析我想念 Primoz 的 GpProfile,并且没有找到一个好的替代品。我曾经尝试过 AQTime,但对它的价格不太满意。

为了跟踪内存泄漏和不可靠的内存访问,我不能比使用 FastMM4 更开心。

于 2008-11-14T22:34:44.160 回答
1

对于分析器,您可以尝试Gurock Software 的 SmartInspect。我从未使用过 GpProfile,但快速浏览它的功能集让我想起了 SmartInspect。有趣的是,它并没有声称自己是一个分析器,但它似乎和 GpProfile 一样多(除非我遗漏了一些东西)。它支持Delphi 2009,有免费试用版,比AQTime便宜一点。

注意:SmartInspect 是记录器而不是分析器。

于 2008-11-15T00:58:38.130 回答
1

我已经使用 ProDelphi 很长时间了,发现它满足了我的需求。

通过使用它提供的数据,我已经能够在系统性能改进方面取得惊人的成果。

对于小型项目,免费版本很好。

对于较大的项目,您需要(付费)专业版。

于 2012-06-13T00:23:19.710 回答
0

这个较早的答案(“如何监视或可视化 delphi 应用程序的内存碎片”)中提到的 FastMM4 内存管理器保留了一个可以在运行时查询的所有分配的列表(并使用包含的演示应用程序显示在网格中)。它不能准确显示哪些对象泄漏,因为统计信息是按块大小计算的。但它对于长期监控生产中的应用程序(例如服务器或服务)很有用。我目前正在将它作为“VisualMM”附加组件集成到(商业)Web 应用程序服务器框架中。

于 2012-03-16T06:22:24.023 回答