用Benchmark模块高效率处理Perl代码

ZDNet软件频道 时间:2006-02-15 作者:Builder.com |  我要评论()
本文关键词:perl
在本文中,我们通过建立一个交互式的工具来测量执行某一代码块所需的时间,为Perl代码计时(基准)提供一种轻松的方法。

在软件设计中,效率就是一切。你的代码的效率越高,它就运行得越快,就能更迅速地响应用户的命令。效率低下,缓慢的代码通常需要进行检查、调整,使它运行得更快。但是所有这些只有在“计时设备”存在的情况下才有可能,“计时设备”可测量某一特定的代码块运行的快慢,为开发人员提供准确的读数,以便于进行代码调整。

在本文中,我们通过建立一个交互式的工具来测量执行某一代码块所需的时间,为Perl代码计时(基准)提供一种轻松的方法。此工具应用perl 的Benchmark.pm模块多次运行一段代码,为每次的运行时间计时并返回所花的平均时间。当你调整代码时,就可以用这个工具来计时,看看代码运行得更快还是更慢。

注意:Benchmark.pm模块与最新版的perl捆绑发行。但是,如果你没有此模块,你可以在perl提示符下运行下列命令来下载并安装此模块:

perl> perl -MCPAN -e "install Benchmark"

脚本

通过创建以下perl脚本来开始:

A

#!/usr/bin/perl

# import Benchmark module

use Benchmark;

# ask for number of runs

print "Enter number of code runs: ";

$runs = <STDIN>;

chomp ($runs);

# allow carriage returns within code

# by altering the EOL indicator

$/ = "#END";

# ask for code block

print "Enter code block (end with #END): ";

$code = <STDIN>;

chomp($code);

# test code and display run time report

print " ...Testing... ";

timethis($runs, $code);

此脚本要求用户输入两个项目:测试代码的次数,以及实际测试的代码块。一旦输入了这些值,Benchmark模块的timethis()函数即会按所需的次数反复运行此代码,并返回一个所花时间的报告。

这段代码有一个有趣的地方,就是对perl的输入记录分离符号的修改,以使其支持多行代码块。正常情况下,perl使用回车来标志用户输入终止,但是由于代码块通常都有多行代码,所以我们将它修改为特殊字符串#END来标志代码块的终止。

下面是一个上述工具运行的实例。样本代码用来计算前100个数字的平方根,并执行5000次。

B

Enter number of code runs:

5000

Enter code block (end with #END):

for ($i=1; $i<=100;$i++) {

牋?$res = sqrt($i);

}

#END

…测试…

timethis 5000

:?5 wallclocksecs ( 4.56 usr +?0.00 sys =?4.56 CPU) @ 1096.49/s (n=5000)

timethis()函数产生的报告有两个构成部分:CPU秒数,即perl运行此代码N次所花时间,以及每秒数据,即每秒钟内代码运行了多少次。明显地,秒值越大,代码运行越快。

在上面的例子中,很明显,perl只用了不到5秒的时间就运行代码5000次。换句话说,perl每秒钟可成功运行此代码块1096次。如果你感兴趣的话,你还可应用此数据来执行更特殊的计算。例如,计算运行一个单独的代码所花的毫秒数。

对总是希望从他们的代码中获取最大性能的开发者而言,这样的工具会十分有用。代码优化以后,此工具可对它进行检测,看它到底运行得更快还是更慢。在每秒内运行的次数越多,代码的效率就更高。

责任编辑:张琎

查看本文的国际来源

 


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134