适用于Delphi的Profiler和内存分析工具

时间:2008-11-14 22:20:32

标签: delphi memory-leaks profiling

我最近从Delphi 4升级到Delphi 2009.使用Delphi 4,我一直使用GpProfile by Primoz Gabrijelcic作为分析器,Memory Sleuth by Turbo Power用于内存分析和泄漏调试。两者都适合我。但我现在需要可以使用Delphi 2009的新工具。

Delphi的性能分析/分析工具的领导者显然是AQTime by AutomatedQA。他们最近甚至吞噬了Memproof by Atanas Soyanov,我理解这是一个优秀且免费的内存分析工具,并将其功能整合到AQTime中。但AQTime对于个人程序员来说非常昂贵。它实际上比升级到Delphi 2009成本更高!

所以我的问题是:是否有其他较便宜的选项可以在当前版本的Delphi中进行性能分析和内存分析,您对此感到满意并推荐,或者我应该咬紧牙关为AQTime付出巨额代价?


Addenum:似乎早期的回答者表明已经包含在Delphi中的FastMM管理器非常适合发现内存泄漏。

那么,源代码分析有什么好的选择吗?

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


Addenum 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美元。 ProDelphi加4。

  5. 分数现在是4-4。你觉得怎么样?


    Addenum 3:Primoz Gabrijelcic正计划让GpProfile再次运作。请参阅他对以下一些回复的评论。他在StackOverflow上为Gabr


    Addenum 4:看起来似乎可能有一个探查器解决方案。请参阅Andre's open source asmprofiler, described below

12 个答案:

答案 0 :(得分:35)

对于价格,你无法击败FastMM4作为内存跟踪器。它使用简单,功能强大,与Delphi完美集成 我想你知道,如果没有下载,安装或更改任何其他内容,只需添加此行

ReportMemoryLeaksOnShutDown := True;

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

具体来说,我们有AQTime。

至于gpProfile,您可以尝试在SO上发布gabr来更新...或者去update gpProfile yourself as it is open source。 ; - )

答案 1 :(得分:30)

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

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

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

答案 2 :(得分:24)

答案 3 :(得分:7)

我对AQtime的分析非常满意。

答案 4 :(得分:4)

使用了GpProfile和AQTime后,我发现两者都能有效地找到导致瓶颈的方法。

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

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

但是我自己没有必要付钱!

答案 5 :(得分:3)

我们使用AQTime Pro并对此感到满意。 Smartbear最近发布了一个完全免费的AQTime standard edition。大多数功能仍然存在,但它们当然具有removed a bit

答案 6 :(得分:2)

我同意你关于ProDelphi的界面,但它确实做得很好,我们很乐意继续使用它。当我们遇到严重的性能问题时,我们只需要偶尔进行分析,它总能帮助我们很快找到问题所在。非常物有所值,迈克尔似乎很高兴为新版本保持更新。

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

  • 检查
  • 中的所有相关文件
  • 全部检查
  • 进行我们需要的分析,然后
  • 取消所有结帐,有效地回到原来的位置。

答案 7 :(得分:2)

有没有人试过the Profiler component at Delphi Area?它是免费软件源代码,它的文字写道:

  

如果你正在寻找一个轻松的   准确测量执行时间的方法   你的代码是免费的,TProfiler是   你需要什么。 TProfiler是一个   非可视和调试组件   这使您可以创建命名   代码中的计时器。

     

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

     

计时器的次数   激活(命中计数)总数   执行时间平均执行   每次点击的时间执行时间   第一次点击执行时间就可以了   最后一击最小的击中   执行时间最大命中   执行时间

答案 8 :(得分:1)

这是真的,对于剖析我错过了Primoz的GpProfile,并没有找到一个好的替代品。我曾经尝试过AQTime,但对价格并不满意。

为了跟踪内存泄漏和狡猾的内存访问,我不能比使用FastMM4更快乐。

答案 9 :(得分:1)

对于个人资料工作者,您可以尝试使用Gurock Software的SmartInspect。我从未使用过GpProfile,但很快看了一下它的功能集让我想起了SmartInspect。有趣的是,它并不声称是一个分析器,但它似乎与GpProfile一样多(除非我遗漏了一些东西)。它支持Delphi 2009,并且免费试用,比AQTime便宜一点。

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

答案 10 :(得分:1)

我一直在使用ProDelphi很长一段时间。发现它符合我的需求。

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

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

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

答案 11 :(得分:0)

FastMM4内存管理器mentioned in this older answer(“如何监视或可视化delphi应用程序的内存碎片”)保留所有可在运行时查询的分配列表(并显示)在网格中使用包含的演示应用程序)。它没有准确显示哪个对象泄漏,因为统计信息是每个块大小。但它对于长期监视生产中的应用程序(例如服务器或服务)非常有用。我目前正在将其作为“VisualMM”插件集成到(商业)Web应用程序服务器框架中。