4

我对nytprofhtml生成的Devel::NYTProf报告完全感到困惑。我正在使用旧版本的 NYTProf 1.90。我知道它是非常旧的版本,但出于多种原因应该使用它。

所以这些 HTML 报告看起来像这样(查看特定的 *.pl 文件报告时):

|Line|Stmts.|   Time   |  Avg. |Code|
|42  | 6804 | 0.04506  | 7e-06 | }; |

我从未见过新版本 nytprofhtml 的报告,所以不确定它们是否相同。

在我的情况下,这条线是整个程序中最慢的部分(它不是一个小程序)。所以我的问题是如何声明这样的'};' 成为程序中最慢的部分,语句更复杂。我认为误解了 NYTProf 的报道。

如果我的问题令人困惑,只需给我这些报告中每一列的定义,这会有所帮助吗?这会有很大帮助。

特别是我对什么感兴趣Stmts。意思是。我在猜,但我不想猜!

提前致谢。

4

1 回答 1

8

Stmts.是语句执行的次数,或者更准确地说,执行从与该行关联的语句(并不总是准确)移动到下一个执行的语句的次数。

Time是执行与该行相关的语句所花费的时间总和。

Avg.被简单地Time除以Stmts.

当前 Devel::NYTProf 文档中的这些摘录可能会有所帮助:

语句分析器测量输入一个 perl 语句和输入下一个语句之间的时间。每当执行到一个新语句时,就会计算自进入前一个语句以来的时间,并将其添加到与前一个语句开始所在的源文件行相关联的时间。[...]

例如,给定:

while (<>) {
    ...
    1;
}

在第一次循环之后,评估条件(在此示例中等待输入)所花费的任何进一步时间都将被记录为已花费在循环中执行的最后一条语句上。

NYTProf 的最新版本(其中有很多)通过截取适当的内部循环操作码以及许多其他重大改进来为这种情况提供准确的计时。

于 2014-01-14T16:36:15.503 回答