我曾经使用过一个内置于系统监视器应用程序中的漂亮的 Apple 分析器。只要你的 C++ 代码是用调试信息编译的,你就可以对正在运行的应用程序进行采样,它会打印出一个缩进树,告诉你父函数的时间花在这个函数上的百分比(以及函数体与其他函数调用) 。
例如,如果 main 调用function_1
and function_2
, function_2
calls function_3
,然后主要调用function_3
:
main (100%, 1% in function body):
function_1 (9%, 9% in function body):
function_2 (90%, 85% in function body):
function_3 (100%, 100% in function body)
function_3 (1%, 1% in function body)
我会看到这一点并想,“在主体的代码中有些东西花费了很长时间function_2
。如果我希望我的程序更快,我就应该从这里开始。”
如何最轻松地获得 Python 程序的精确分析输出?
我见过有人说要这样做:
import cProfile, pstats
prof = cProfile.Profile()
prof = prof.runctx("real_main(argv)", globals(), locals())
stats = pstats.Stats(prof)
stats.sort_stats("time") # Or cumulative
stats.print_stats(80) # 80 = how many to print
但与那个优雅的调用树相比,它相当混乱。如果您可以轻松做到这一点,请告诉我,这会有很大帮助。