| 
 
     
- UID
 - 1 
 - 威望
 - 1240 点 
 - 金钱
 - 24019 金币 
 - 点卡
 - 317 点 
 
  | 
1#
 
发表于 2003-8-10 15:20
 |  只看该作者
 
 
 
 [转帖]perl语句测试消耗时间对比
雷鸟1.1GHZ,内存256兆,IIS5.0 perliisdll环境测试: 
 
####################   
方案一 while 输出  最常用 
 
open (FILES, "index");   
while (<FILES>){   
print;   
}   
close(FILES);   
程序占用 CPU 时间:0.23 usr + 0.22 sys 合计运行时间 450 毫秒   
#######################   
方案二: 数组读取输出   
open (FILES, "index");   
@reads=<FILES>;   
print @reads;   
 
 
程序占用 CPU 时间:4.18 usr + 0.09 sys 合计运行时间 4270 毫秒 这个方法也常用,但效率最低的   
 
换为@_;   
open (FILES, "index");   
@_=<FILES>;   
print @_;   
程序占用 CPU 时间:3.64 usr + 0.11 sys 合计运行时间 3750 毫秒 节省一点时间:)   
 
################################   
方案三:   
 
open (FILES, "index");   
@_=<FILES>;   
 
#print @_;   
close(FILES);   
foreach (@_){   
print;   
}   
 
程序占用 CPU 时间:3.79 usr + 0.15 sys 合计运行时间 3940 毫秒   
很奇怪,和上面相同,说明,只要打印数组,就和foreach处理方式相同   
##############################   
方案4 不打印   
open (FILES, "index");   
@_=<FILES>;   
#print @_;   
close(FILES);   
程序占用 CPU 时间:3.45 usr + 0.00 sys 合计运行时间 3450 毫秒 还是相同   
更奇怪,少一次循环,为什么时间还相同   
 
#########################################   
方案6,用变量代替数组直接读取输出。   
 
open (FILES, "index");   
$/="";   
$reads=<FILES>;   
print $reads;   
close(FILES);   
$/="\n";   
 
程序占用 CPU 时间:0.04 usr + 0.00 sys 合计运行时间 40 毫秒 真快丫   
 
##############################################   
方案7 用分割变量来从新生成数组,代替数组@_=<FILES> 直接读取方式,循环输出   
open (FILES, "index");   
$/="";   
$reads=<FILES>   
 
close(FILES);   
$/="\n";   
 
@_=split ( /\n/,$reads);   
foreach (@_){   
print $_;   
}   
 
 
程序占用 CPU 时间:0.34 usr + 0.11 sys 合计运行时间 450 毫秒   
 
有趣,比普通@_=<FILES> 直接读的方法要快10倍,但很是不解   
 
如果数组不全部输出,单纯赋值占用时间很短 
open (FILES, "index");   
$/="";   
$reads=<FILES>   
 
close(FILES);   
$/="\n";   
 
@_=split ( /\n/,$reads);   
 
程序占用 CPU 时间:0.05 usr + 0.00 sys 合计运行时间 50 毫秒   
 
############################################### 
 
散列   
     
--------------------------------------------------------------------------------   
 
open (FILES, "index");   
while (<FILES>){$i++;   
$hash{$i}=($_)   
 
}   
print %hash;   
 
close(FILES);   
 
 
程序占用 CPU 时间:0.66 usr + 0.41 sys 合计运行时间 1070 毫秒   
 
数组的最快方式是450毫秒,散列全部输出时间大概比数组慢一倍   
 
散列不输出 
open (FILES, "index");   
while (<FILES>){$i++;   
$hash{$i}=($_)   
 
}   
#print %hash;   
 
close(FILES);   
程序占用 CPU 时间:0.09 usr + 0.04 sys 合计运行时间 130 毫秒  还是比数组慢 
 
从hash中取出一个元素 
 
open (FILES, "index");   
while (<FILES>){$i++;   
$hash{$i}=($_)   
 
}   
 
close(FILES);   
print $hash{8900}; 
 
程序占用 CPU 时间:0.13 usr + 0.00 sys 合计运行时间 130 毫秒 几乎不增加时间 
 
数组也是,测不出时间 
open (FILES, "index");  
$/="";  
$reads=<FILES>;  
 
close(FILES);  
$/="\n";  
 
@_=split ( /\n/,$reads);  
 
print $_[8900]; 
 
程序占用 CPU 时间:0.05 usr + 0.00 sys 合计运行时间 50 毫秒 
 
 
##########################   
以上测试结果有的差别很大,有的差别不大。   
 
即使有些差别虽然是细微的,程序中如果把这些命令都采用最优化方式,相信会有效果的   
 
我最近在把我的论坛调用比较频繁的核心代码进行逐行检查,反复测试优化中~~~~   
 
谁把其他的方法都测试以下,拿出来给爱好者继续分享,我也继续测试中,今晚测试系统级IO命令,看有没有差别 
 
仅供参考。   
 
附,my测试方法 
######################### 
use CGI::Carp qw(fatalsToBrowser); 
use Benchmark;   
$TT0 = new Benchmark;   
print "Content-type: text/html\n\n"; 
open (FILES, "index"); 
$/=""; 
  $reads=<FILES>;  
 
close(FILES); 
$/="\n"; 
 
@_=split ( /\n/,$reads); 
 
   print @_;  
 
########################### 
print"<hr>"; 
$TT1 = new Benchmark;   
$td = Benchmark::timediff($TT1, $TT0);   
$td = Benchmark::timestr($td);   
$td =~ /(\d+)\s*wallclock secs \(\s*?(\d*?\.\d*?)\s*usr\s*\+\s*(\d*?\.\d*?)\s*sys/i;   
my $alltimas=($2+$3)*1000;   
print "<center><font color=$cpudispcolor>程序占用 CPU 时间:$2 usr + $3 sys 合计运行时间 $alltimas 毫秒";   
 
exit; |   
 
 
 
 
                     我是一个呼吸着现在的空气而生活在过去的人 
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠 
                                     我已习惯了孤独,爱上孤独 
                                 他让我看清了自我,还原了自我 
                             让我再静静的沉思中得到快乐和满足 
                                   再孤独的世界里我一遍又一遍 
                                   不厌其烦的改写着自己的过去 
                                             延伸到现在与未来 
                                       然而那只是泡沫般的美梦 
                                 产生的时刻又伴随着破灭的到来 
                         在灰飞烟灭的瞬间我看到的是过程的美丽 
                                      而不是结果的悲哀。。。 
 | 
 
 
 
 |