Zai*_*aid 3 perl time profiling
我很想重新回答这个问题'看看这块砖.它属于哪种类型的房子?'
这里的情况:我已经有效地被要求形轮廓具有既得不到分析器(甚至一些子程序Devel::DProf),也不Time::HiRes.本练习的目的是"找到"瓶颈.
目前,我正在每个子文件的开头和结尾处打印打印语句,记录条目和退出文件,以及time函数的结果.不理想,但鉴于情况,这是我能做的最好的事情.至少它会让我看到每个子调用多少次.
代码在Unix下运行.我认为最接近我需要的是 perlfaq8,但这似乎没有帮助(我不知道如何制作syscall,并且想知道它是否会不可预测地影响代码时序).
不是你典型的日常问题......
基本上,我们的想法是,如果您使用-d标志运行Perl ,它将进入调试器.然后,当你运行程序时,ctrl-Break或ctrl-C应该使它在它正在做的任何事情的中间暂停.然后,您可以键入T以显示堆栈,并在继续之前检查任何其他变量.
这样做大约10或20次.任何代码行(或任何函数,如果您愿意)花费相当大的时间百分比将大致出现在堆栈样本的百分比上,因此您不会错过它.
例如,如果一行代码(通常是函数调用)花费20%的时间,并且您暂停程序20次,您将在4个堆栈样本上看到该行,给出或取1.8个样本.如果您可以避免执行该行或者执行该行少得多,则可以节省的时间是总体执行时间减少20%.
然后你可以重复它来发现更多问题.
你说的目的是'找到'瓶颈.这种方法正是如此.测量函数执行时间只是一种非常间接的方式.