Profiler能够在执行某些过程时开始分析

时间:2009-12-20 14:37:21

标签: delphi delphi-2010 profiling

我在StackOverflow上浏览并阅读了很多有关分析器的问题/答案,但还有一个问题我还没有找到答案。

我使用TurboPowers Memory Sleuth已经使用Delphi 7多年了,而且我仍然非常讨厌它。

但是,我计划升级到Delphi 2010,并怀疑该程序将不再运行。所以我需要找一些替代品。

我非常喜欢Memory Sleuth的一个事实是,您可以从项目编译的列表中选择一个过程,以开始分析。

通常这是一个按钮点击事件。通过这种方式,您可以轻松地仅通过单击按钮来查看一些冗长的代码,但是分析器是否会留出所有时间来启动程序,显示它的主要表单......

分析在所选例程开始时开始,并在所选例程结束时结束。请注意,所有这些都不需要在代码中更改一行(我发现非常非常重要的事实)。

任何有关当前存在(并维护)的剖析器的任何建议都可以为我做这个吗?

4 个答案:

答案 0 :(得分:4)

商业上来自AQTimeAutomatedQA,功能非常丰富。它可以做你想要的。

答案 1 :(得分:3)

看看Sampling Profiler。它并不像你描述的那样简单,但它是一个非常好的工具,你可以通过OutputDebugString调用打开和关闭所选程序的分析。我认为如果没有Embarcadero写一个探查器,那就好了。

答案 2 :(得分:2)

AQTime绝对可以做到这一点。您可以选择要包含的模块。但是如果你要去Delphi 2010,他们还没有将它集成到IDE中。实际上就在几个星期前,他们终于让他们的Delphi 2009集成工作 - 在D2009发布一年后,从我最初的看起来,它似乎是错误的。

AQTime也非常昂贵,只需600美元。如果您确实购买,请从one of their partners购买,以便节省一些钱(例如Falafel以500美元而不是600美元的价格提供)。 {这是我个人的咆哮:这是一个让我失望的可怕政策。当您直接从供应商处购买时,您不应该支付更多费用。他们应该让他们的合作伙伴以相同的价格出售并给他们一个%,或者他们不应该在他们自己的网站上提供它,只是列出你可以购买它的合作伙伴。}

但即使考虑到这些问题,AQTime也是我发现的唯一可以很好地为您提供逐行执行计数和时间的工具。这是它给出的最终结果让它变得有价值,经过多年的问题和答案重新分析我在StackOverflow过去一年给出的,我可能最终得到它们(我现在进入我的第三次试验他们已经添加了D2009集成)。

我的主要问题是:

我尝试了答案:

尽管有Mason的评论,但我没有发现AQTime对于分析来说太慢了,只要您只分析您当前正在优化的例程。只是不要总是为一切打开它。

我也曾尝试过Sampling Profiler。它对我来说不起作用。它似乎有90%的结果是在系统例程中,字符串副本和移动占据了大部分。那对我没有帮助。我需要知道我的例程中哪些行正在调用这些动作和副本。

如果你想要一个好的免费的,我强烈推荐asmprofiler。它实际上是一个非常好的分析器,类似于AQTime,具有非常好的轮廓结果。它唯一的缺点是它只分析到程序级别而不是线级别,这是我赞成AQTime的唯一原因。

P.S。对于Micro Optimization,他们说不要依赖AQTime。我现在已经做了大量的测试,而且我对AQTime的帮助给我的印象越来越深刻,它的行级信息可以帮助你找到那些微优化的地方。这本身就使产品值得一试。

如果将行级信息添加到asmprofiler中,那么那个信息将是明智之举。

但如果Embarcadero最终决定add a built-in profiler right into Delphi,那不是很好吗?在我写这篇文章时,它在Delphi UserVoice中排在第10位。 Vote Here to move it up!

答案 3 :(得分:2)

为了找到内存泄漏,像AQTime这样的东西可能是最好的。为了找到速度问题,您是否考虑过stackshots的简单方法?这是低技术但有效的。 Here's an explanation.