小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

perl幾個(gè)讀取文件命令測(cè)試比較

 yfkkiss 2010-10-16
perl幾個(gè)讀取文件命令測(cè)試比較,僅供參考
2007年07月06日 星期五 上午 10:03
讀取文件命令測(cè)試比較,僅供參考   ;
  
因?yàn)槲募袛?shù)少了測(cè)試不出來(lái)效果,我特意做了包含整1萬(wàn)行的數(shù)據(jù),大小170K。
  
本機(jī)雷鳥(niǎo)1.1GHZ,內(nèi)存256兆,IIS5.0 perliisdll環(huán)境
  
####################
方案一 while 輸出   最常用
  
open (FILES, "index");
while (<FILES>){
print;
}
close(FILES);
程序占用 CPU 時(shí)間:0.23 usr + 0.22 sys 合計(jì)運(yùn)行時(shí)間 450 毫秒
#######################
方案二: 數(shù)組讀取輸出
open (FILES, "index");
@reads=<FILES>;
print @reads;
  
  
程序占用 CPU 時(shí)間:4.18 usr + 0.09 sys 合計(jì)運(yùn)行時(shí)間 4270 毫秒 這個(gè)方法也常用,但效率最低的
  
換為@_;
open (FILES, "index");
@_=<FILES>;
print @_;
程序占用 CPU 時(shí)間:3.64 usr + 0.11 sys 合計(jì)運(yùn)行時(shí)間 3750 毫秒 節(jié)省一點(diǎn)時(shí)間:)
  
################################
方案三:
  
open (FILES, "index");
@_=<FILES>;
  
#print @_;
close(FILES);
foreach (@_){
print;
}
  
程序占用 CPU 時(shí)間:3.79 usr + 0.15 sys 合計(jì)運(yùn)行時(shí)間 3940 毫秒
很奇怪,和上面相同,說(shuō)明,只要打印數(shù)組,就和foreach處理方式相同
##############################
方案4 不打印
open (FILES, "index");
@_=<FILES>;
#print @_;  
close(FILES);
程序占用 CPU 時(shí)間:3.45 usr + 0.00 sys 合計(jì)運(yùn)行時(shí)間 3450 毫秒 還是相同
更奇怪,少一次循環(huán),為什么時(shí)間還相同
  
#########################################
方案6,用變量代替數(shù)組直接讀取輸出。
  
open (FILES, "index");
$/="";
$reads=<FILES>;
print $reads;
close(FILES);
$/="\n";
  
程序占用 CPU 時(shí)間:0.04 usr + 0.00 sys 合計(jì)運(yùn)行時(shí)間 40 毫秒 真快丫
  
##############################################
方案7 用分割變量來(lái)從新生成數(shù)組,代替數(shù)組@_=<FILES> 直接讀取方式,循環(huán)輸出
open (FILES, "index");
$/="";
$reads=<FILES>
  
close(FILES);
$/="\n";
  
@_=split ( /\n/,$reads);
foreach (@_){
print $_;
}
  
  
程序占用 CPU 時(shí)間:0.34 usr + 0.11 sys 合計(jì)運(yùn)行時(shí)間 450 毫秒
  
有趣,比普通@_=<FILES> 直接讀的方法要快10倍,但很是不解
  
如果數(shù)組不全部輸出,單純賦值占用時(shí)間很短
open (FILES, "index");
$/="";
$reads=<FILES>
  
close(FILES);
$/="\n";
  
@_=split ( /\n/,$reads);
  
程序占用 CPU 時(shí)間:0.05 usr + 0.00 sys 合計(jì)運(yùn)行時(shí)間 50 毫秒
  
###############################################
  
散列  
--------------------------------------------------------------------------------
  
open (FILES, "index");
while (<FILES>){$i++;
$hash{$i}=($_)
}
print %hash;
  
close(FILES);
  
  
程序占用 CPU 時(shí)間:0.66 usr + 0.41 sys 合計(jì)運(yùn)行時(shí)間 1070 毫秒
  
數(shù)組的最快方式是450毫秒,散列全部輸出時(shí)間大概比數(shù)組慢一倍
  
散列不輸出
open (FILES, "index");
while (<FILES>){$i++;
$hash{$i}=($_)
  
}
#print %hash;
  
close(FILES);
程序占用 CPU 時(shí)間:0.09 usr + 0.04 sys 合計(jì)運(yùn)行時(shí)間 130 毫秒   還是比數(shù)組慢
  
從hash中取出一個(gè)元素
  
open (FILES, "index");
while (<FILES>){$i++;
$hash{$i}=($_)
}
close(FILES);
print $hash{8900};
  
程序占用 CPU 時(shí)間:0.13 usr + 0.00 sys 合計(jì)運(yùn)行時(shí)間 130 毫秒 幾乎不增加時(shí)間
  
數(shù)組也是,測(cè)不出時(shí)間
open (FILES, "index");
$/="";
$reads=<FILES>;
  
close(FILES);
$/="\n";
  
@_=split ( /\n/,$reads);
  
print $_[8900];
  
程序占用 CPU 時(shí)間:0.05 usr + 0.00 sys 合計(jì)運(yùn)行時(shí)間 50 毫秒
##########################
以上測(cè)試結(jié)果有的差別很大,有的差別不大。
  
即使有些差別雖然是細(xì)微的,程序中如果把這些命令都采用最優(yōu)化方式,相信會(huì)有效果的
  
我最近在把我的論壇調(diào)用比較頻繁的核心代碼進(jìn)行逐行檢查,反復(fù)測(cè)試優(yōu)化中~~~~
  
誰(shuí)把其他的方法都測(cè)試以下,拿出來(lái)給愛(ài)好者繼續(xù)分享,我也繼續(xù)測(cè)試中,今晚測(cè)試系統(tǒng)級(jí)IO命令,看有沒(méi)有差別
  
僅供參考。
  
附,my測(cè)試方法
#########################
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 時(shí)間:$2 usr + $3 sys 合計(jì)運(yùn)行時(shí)間 $alltimas 毫秒";
 
exit;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多