所有分析器都会显着降低执行速度吗

时间:2010-09-14 20:38:03

标签: performance profiling d

我有经验的探查器(主要是带编译器的Digital Mars D探测器)似乎大大减慢了被分析程序的执行速度。这对我使用剖析器的意愿产生了重大影响,因为它使得剖析成为我的许多程序的“真实”运行,而不是在非常小的输入上进行测试,这是不切实际的。我不太了解如何实现分析器。在分析几乎是生活中的事实时,是否有一个主要的(> 2x)减速,或者是否存在避免它的剖析器?如果可以避免,是否有适用于D的快速分析器,最好是D2,最好是免费的?

4 个答案:

答案 0 :(得分:16)

我不了解D个剖析器,但一般来说,探查器可以通过两种不同的方式收集剖析信息。

第一种是通过仪器,通过在整个地方注入日志记录调用。这或多或少地减慢了应用程序的速度。通常更多。

第二个是抽样。然后,探查器会定期中断应用程序并检查调用堆栈。这根本不会减慢应用程序的速度。

采样分析器的缺点是结果不像仪器分析器那样详细。

如果您可以使用取样而不是仪器运行,请检查您的探查器的文档。否则,您在“抽样”和“工具”中有一些新的Google术语。

答案 1 :(得分:2)

My favorite method of profiling减慢了程序方式的速度,这没关系。我在调试器下运行程序,实际加载,然后我手动中断它。然后我将调用堆栈复制到某处,比如记事本。因此,它需要分钟的顺序来收集一个样本。然后我可以恢复执行,或者甚至可以从头开始重新获得另一个样本。

我这样做了10到20次,足够长的时间,从壁钟的角度来看这个程序实际上在做什么。当我看到很多东西出现时,我会采取更多样本直到它再次出现。然后我停下来真的研究它在做的过程中的原因和原因,这可能需要10分钟或更长时间。这就是我如何发现这项活动是否可以用更有效的代码替代的东西,即它并非完全必要。

你知道,我对测量它的速度或速度不感兴趣。我可以单独做,也许只有手表。我有兴趣找出哪些活动占用了大部分时间(不是金额百分比),如果某些事情花了很长时间,那就是概率每个stackshot都会看到它。

通过“活动”我并不一定意味着PC挂出的地方。在现实的软件中,PC几乎总是在某个系统或库例程中关闭。通常更重要的是我们的代码中的呼叫站点。例如,如果我看到一堆3个调用显示在一半的堆栈样本上,则代表非常好的搜索,因为如果其中任何一个不是真正必要的并且可以省去,执行时间将会减少一半。

如果你想要一个咧嘴笑的经理,那就做一两次。

即使在你认为数学上很重要的科学数字运算应用程序,你会认为低级优化和热点将统治当天,你知道我经常发现什么?数学库例程是检查参数,而不是运算。通常,代码没有按照您的想法进行操作,并且您不必以最快的速度运行它来找到它。

答案 2 :(得分:1)

我会说是的,无论您使用的是哪种分析器,还是使用何种语言,采样和工具形式的分析都会对您的程序产生重大影响。

答案 3 :(得分:1)

您可以尝试h3r3tic的xfProf,这是一个采样分析器。我自己没有尝试过,但那家伙总是很酷的东西:)

来自说明:

  

如果程序只采样几百(或千)   每秒一次,性能开销不会很明显。