4

我无法在网上的任何地方找到这个。我一直在寻找使用分析器如何更好地优化我的代码的方法,并且在按哪些函数累计使用时间最长进行排序时,str()、print 和其他类似的广泛使用的函数会占用大部分配置文件。分析 python 程序以获取用户定义的函数只是为了查看他们可以优化的代码区域的最佳方法是什么?

我希望这是有道理的,您对这个主题的任何了解都将不胜感激。

4

1 回答 1

8

好的,我假设您的真正目标是使您的代码尽可能快,对吧?

很自然地假设你通过找出你的函数需要多长时间来做到这一点,但还有另一种方式来看待它。

考虑当您的程序运行时,它会追踪一个调用树,它有点像您窗口外的一棵真实树。主干就像main函数,任何分支从中分离出来的地方就像调用另一个函数。

假设每片“叶子”都需要一定的时间,而你要做的就是修剪这棵树,以便尽可能多地去除叶子。

一种方法是找到叶子很多的树枝并将叶子剪掉。另一种方法是在不需要时将整个树枝剪掉。问题是找到你不需要的重分支。

一种非常简单的方法是随机挑选几片叶子,比如 10 片,在每片叶子上,沿着树枝沿着一条线一直追踪到树干。任何分支点都会有一些这样的线穿过它,从叶子到树干。穿过该分支点的线越多,该分支上的叶子就越多,通过修剪它可以节省更多。

这是您如何将其应用于您的程序的方法。要对叶子进行采样,您可以随机暂停程序并查看调用堆栈。那是回到主干的线路。它上面的每个调用站点(不是函数,调用站点)都是一个分支点。如果该调用站点位于样本的一小部分上,例如 40%,那么这大致就是通过修剪它可以节省的成本。

因此,不要将其视为衡量功能需要多长时间。可以将其视为询问哪些呼叫站点“重”。这里的所有都是它的。

于 2010-04-30T01:40:48.433 回答