![]() |
1
7
基本上,如果使用
做10到20次。花费大量时间的任何代码行(或者任何函数,如果您愿意的话)将大致出现在堆栈示例的百分比上,因此您不会错过它。 例如,如果一行代码(通常是函数调用)花费20%的时间,并且您暂停程序20次,那么您将在4个堆栈样本上看到该行,给出或获取1.8个样本。如果可以避免执行该行,或者执行的时间少得多,则可以节省20%的时间。 然后你可以重复它来发现更多的问题。 你说目的是“定位”瓶颈。这个方法就是这样做的。测量函数执行时间只是一种非常间接的方法。 |
![]() |
2
1
|
![]() |
3
0
好吧,您可以编写自己的分析器。没有听起来那么糟。分析器只是一个非常特殊的案例调试器。你想看看 perldebguts 如果你想找到一些好的第一步代码 必须 自己写。 你什么 希望 而你的老板想要的,尽管他或她可能不知道,是利用 Devel::NYTProf 要做好代码的分析工作,并完成任务,而不是等待您在学习如何完成代码的同时部分地复制代码的函数。 你对“个人使用”的评论没有意义。你在为工作而工作,工作需要完成,你需要(或你的经理需要)资源来完成这项工作。”“个人使用”似乎没有进入其中。 是否有人拒绝在模块上签字,将其安装在运行待测软件的机器上?这是许可证问题吗?是否不允许在生产机器上安装任意软件(可以理解,但在软件投入使用前必须有某种方式进行测试——我希望——在那里进行分析)? 为什么来自可靠来源的知名模块不能使用?你有没有向你的经理说明从零开始编写一个新的、功能性较低的分析器要花更多的钱,而不是找到一种既好又可用的方法? |
![]() |
4
0
对于每个子例程,在其周围创建一个包装器,它以某种格式报告时间,您可以将时间导出到R、数据库、Excel或类似的格式(csv将是一个不错的选择)。在代码中添加类似的内容。如果您使用的Perl小于5.7(当time::hires首次添加到核心时),请使用上面提到的syscall,而不是下面的time::hires函数。
将'subs you want to profile'替换为需要分析的subs,并在需要时使用open()ed文件句柄而不是stderr,记住,您可以将运行结果与脚本输出(在UNIX上,使用bourne、korn和bash shell)分开,如下所示
|
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
BioRod · 我不能用Perl打印键和值 3 年前 |
![]() |
user17227456 · Perl CLI代码无法追加字符串行 3 年前 |
![]() |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 3 年前 |
![]() |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 3 年前 |
![]() |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 3 年前 |
![]() |
Pranay Nanda · 使用regex解析许可证文件 7 年前 |