You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Perl NYTProf生成简洁的行级耗时统计文本报告

解决方案

方法1:直接使用NYTProf自带的命令行工具

你完全不需要生成HTML报告,NYTProf自带的nytprofstats工具原生支持命令行输出行级耗时统计:

  • 执行如下命令即可直接得到按耗时从高到低排序的行级统计结果:
nytprofstats -l nytprof.out

输出内容默认就包含函数名、行号、总耗时、耗时占比字段,你可以用grep、awk简单过滤就能得到你要的格式,示例过滤命令:

nytprofstats -l nytprof.out | awk '{print $1":"$2" "$5}' | head -20

方法2:通过CSV导出自定义格式

如果需要更灵活的格式调整,可以用nytprofcsv导出结构化数据后自行处理:

  1. 生成CSV格式的统计文件:
nytprofcsv nytprof.out
  1. 生成的nytprof_line.csv中包含所有行级耗时数据,你可以用任意文本处理工具排序、筛选得到你要的输出,示例:
awk -F ',' 'NR>1 {print $3":"$4" "sprintf("%.1f%%", $7*100)}' nytprof_line.csv | sort -k2 -nr

方法3:调用NYTProf API自定义脚本

如果上面两种都不符合你的格式要求,可以写个十几行的Perl脚本直接读取分析结果,示例代码:

use Devel::NYTProf::Data;
my $profile = Devel::NYTProf::Data->new({filename => 'nytprof.out'});
my %line_times;
for my $file ($profile->all_files) {
    my $line_stats = $profile->file_line_stats($file);
    for my $line (keys %$line_stats) {
        my $time = $line_stats->{$line}{time};
        my $sub = $line_stats->{$line}{subname} || 'main';
        $line_times{"$sub:$line"} = $time;
    }
}
my $total_time = $profile->attribute('total_time');
for my $key (sort {$line_times{$b} <=> $line_times{$a}} keys %line_times) {
    printf "%s\t%.1f%%\n", $key, $line_times{$key}/$total_time*100;
}

运行这个脚本就能直接输出你要的按耗时降序排列的统计结果。

内容的提问来源于stack exchange,提问作者Walt Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:18:01