Delphi 分析工具[已关闭]

neekobn8  于 2023-11-18  发布在  其他
关注(0)|答案(9)|浏览(163)

**已关闭。**此问题不符合Stack Overflow guidelines。目前不接受回答。

要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于Stack Overflow来说是离题的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,describe the problem以及到目前为止为解决它所做的工作。
9年前关闭。
Improve this question
我的 Delphi 2006应用程序有一些性能问题。您能推荐一些分析工具来帮助我找到瓶颈吗
例如,像turbo Profiler这样的工具

2q5ifsrm

2q5ifsrm1#

我使用和recomend采样分析器,我想你可以得到它从embarcadeiro。公共,附件新闻组。

hjzp0vay

hjzp0vay2#

www.AutomatedQA.com是 Delphi 性能分析的最佳选择(AQTime)
这里有另一个选择,我以前没有用过这个:http://www.prodelphi.de
我所知道的 Delphi 的最终选择,http://gp.17slon.com/gpprofile/index.htm
最后一点,www.torry.net是搜索 Delphi 组件/工具的好地方

vtwuwzda

vtwuwzda3#

这里有另一个选择,我以前没有用过这个:http://www.prodelphi.de

aamkag61

aamkag615#

最后一点,www.torry.net是搜索 Delphi 组件/工具的好地方

iyfamqjs

iyfamqjs6#

不久前我问过同样的问题question
我已经下载并试用了AQtime,它看起来确实很全面,但它不是一个易于使用的工具,而且对于单个程序员来说非常昂贵(即600美元)。我喜欢它是非侵入性的事实(没有改变你的代码),它可以做逐行分析,直到我发现,因为它是一个检测分析器,它可能会导致不正确的优化,如:Why is CharInSet faster than Case statement?
我尝试了一个ProDelphi的演示,便宜得多(我想大约80美元),但对我来说太笨重了--我一点也不喜欢它的用户界面,而且它是侵入性的--改变你的代码来添加仪器,你必须小心。
我使用GpProfile与 Delphi 4多年。我喜欢它。它也是侵入性的,但它工作得很好,我学会了信任它,它从来没有给我一个问题,在10年。但当我升级到 Delphi 2009年,我不认为最好尝试使用它,因为它还没有升级,由GP的承认,如果不修改就不能工作。我想你也不能在 Delphi 2006中使用它。
ProDelphi和GpProfile只能在过程级别进行分析。如果你想做单独的行(我有时不得不这样做),你必须为每一行调用101,102,103,并将一行放在每一行中。这样做有点烦人,但它给了我很好的结果(至少我对GpProfile这样做的结果很满意)。
我在CharInSet问题中接受的答案是“采样分析器,定期检查CPU的位置,通常更适合测量代码时间。”后来的answer提供了Eric Grange的免费采样分析器,用于 Delphi ,现在支持 Delphi 2009。我还没有尝试过,但我听说过它的好消息,这是我要尝试的下一个。
顺便说一句,你最好不要买AQtime,而是用它来把你的 Delphi 2006升级到 Delphi 2009。它的稳定性、速度和额外的功能(尤其是Unicode)都是值得的。请参阅:升级到D2009(不包括Unicode)的主要动机是什么?
另外,AQtime还没有集成到 Delphi 2009中。
另一个免费的,我发现的来源,但还没有尝试过的是TProfiler。如果有人尝试过,我想知道他们的想法。
注意:我后来添加到question 291631的Addenum似乎就是答案。
2010年2月后续。我咬紧牙关购买了AQTime。几个月前他们终于将其集成到我使用的 Delphi 2009中(但他们仍然必须做 Delphi 2010)。查看源代码行及其单独的时间和计数对我来说是无价的,AQTime在这方面做得非常出色。

gkn4icbw

gkn4icbw7#

我刚刚找到一个非常好的免费sampling profiler,它支持 Delphi 2009

cgvd09ve

cgvd09ve8#

我用过ProDelphi,主要是为了确定哪些例程占用的时间最多。它是一个插装分析器,意味着它在每个例程的开头和结尾添加了一些代码。你可以通过注解中的指令控制它分析的例程。你也可以分析例程的部分。但是这些部分必须在同一个块级别开始和停止,优化必须在ProDelphi插入它的代码的地方(你放置指令的地方)关闭,但是你可以在其他任何地方打开它。
界面有点笨拙,但是一旦你掌握了它的窍门,速度很快。你可以用免费版本做有用的工作(限制在10个例程或部分)。ProDelphi可以快速告诉你应该检查哪些例程。但是不能告诉你为什么,或者是哪些行。
最近,我开始使用英特尔的VTune性能分析器。“哇”并不是开始就能概括它的。我印象深刻。我根本不知道现代英特尔处理器中内置了所有这些功能。您知道吗?它可以准确地告诉您,在从更高级别的缓存重新加载一个字之前,一条指令需要等待L1数据缓存横向查看另一个核心的频率是多少?如果我继续写下去,我听起来就像是一个气喘吁吁的产品广告。
去英特尔下载完整的工作时间演示。在网上搜索,找到几个关于如何开始的视频。(否则,你会有被所有选项阻碍的风险。)它适用于任何编译器。只需将其指向. exe。如果您的.exe包含调试信息,它会显示源代码行,并且您将其指向源代码。
我在尝试优化一个调用我编写的函数的内部循环时遇到了问题。除了length(str)之外,没有任何外部调用。这个内部循环每次运行数十亿次,占用了大约一半的CPU时间--这是一个完美的优化候选对象。我尝试了各种标准优化,几乎没有效果。VTune显示了热点。我只是向下钻,直到它显示了我的代码生成的ASM,以及每条指令所用的时间。
这是VTune告诉我的:

  • line nnnn [line of Delphi code].
  • addr hhhh cmp byte ptr [edx+ecx],0x 14 h- 3个周期
  • addr hhhh ja label_x-10302个周期

绝对值没有任何意义。(我想我是在测量每条指令的周期。)相对值让我们很清楚所有的时间都花在了哪里。最棒的是建议窗口。它告诉我代码在等待数据加载到L1数据缓存中时停顿了,实际上给了我如何避免停顿的好建议。
我的错误是把Core 2 Quad看作是一个非常快的8086 CPU。No^3。代码花了99%的时间等待从内存加载数据,因为我跳得太多了。我的算法假设内存是RAM(随机存取)。这不是现代CPU的工作方式。L1缓存中的数据可能在1或2个周期内被访问,但访问L2或L3缓存需要花费数十到数百个周期,而进入RAM则要花费数千美元。然而,当你顺序访问数据时,所有这些延迟都被避免了--因为处理器将在你请求的第一个字节之后用数据预加载该高速缓存。
最终的结果是,我重写了算法,以更顺序地访问数据,并获得了10倍的加速,这已经足够好了。当我有时间的时候,我确信我可以再获得10倍的加速。但这只是我的极客。足够好就足够好了。
我已经知道,优化算法而不是优化代码可以获得最大的效果。我以为我只需要分析器告诉我需要优化什么。但我也需要它来找到瓶颈的原因,这样我就可以设计一个更快的算法。
新的算法与旧的算法没有根本的不同。它只是存储数据,以便可以顺序访问。例如,在一个地方,我把一个字段从一个记录数组移到它自己的整数数组中--因为内部循环不需要每条记录中的其余数据。我还将一个矩形矩阵存储为动态数组的动态数组。代码使用此随机访问兆字节的数据(而糟糕的L1数据缓存只有64 Kb)。我想出了如何将其存储在线性数组中作为矩阵的对角线,这是我使用数据的顺序。(好吧,也许那部分根号。)
总之,我在VTune上卖得很好。

rkttyhzu

rkttyhzu9#

我过去在 Delphi 7项目中成功地使用了http://www.prodelphi.de。便宜又好用。不要让布什联盟的网站吓跑你。

相关问题