开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

用Benchmark模块高效率处理Perl代码
作者: Builder.com
2006-02-15 13:36:58


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

在本文中,我们通过建立一个交互式的工具来测量执行某一代码块所需的时间,为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次。如果你感兴趣的话,你还可应用此数据来执行更特殊的计算。例如,计算运行一个单独的代码所花的毫秒数。

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

责任编辑:张琎

查看本文的国际来源

 

声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号