今天看到一篇對比 perl, C, C++, Java 效率的博文html
把C 和 Perl的代碼摘下來, 從1500萬行的文件中查找指定字符串,他的機器用C 2分多完成,C++ 4分多完成,perl是8分多完成。ide
C代碼以下:htm
#include <stdio.h> #include <string.h> void main(){ int len=2048; char filename[20];//文件名 char buff[10000]; //文件內容緩衝區 char hit[5]; // 查找的字符串 FILE *fd; int i,j,flag=0,over=0; int max,readed; int count=0;//最後的結果 strcpy(&filename[0] , "d:\\access.log_"); // 指定文件名 strcpy(&hit[0] , "HIT"); // 指定字符串 buff[0]=0x0; buff[1]=0x0; //打開文件: if((fd = fopen(&filename[0] , "rb"))==NULL){ printf("Error : Can not open file %s\n",&filename[0]); } //讀取文件內容 while(over != 1){ readed = fread(&buff[2] , 1 , len , fd); if(readed < len){ over=1; max=readed; }else{ max=len; } for(i=0;i<max;i++){ for(j=0;j<3;j++){ if(hit[j] != buff[i+j]){ flag=0;//一旦有一個不相同就退出而且標誌爲0 break; }else{ flag=1;//一個相同爲1,若是連續都相同最後結果定是1 } } if(flag==1){ count++; i+=j-1; }else{ if(j==0){ i+=(j); }else{ i+=(j-1); } } } //把最後兩個字符轉移到前面兩個字節以防止切斷搜索串. buff[0]=buff[max]; buff[1]=buff[max+1]; } fclose(fd); printf("count:%d\n",count); }
perl代碼以下:字符串
#!/usr/bin/perl -w $filename="d:\\access.log_"; $count = 0; open(FILE , "<$filename"); while(<FILE>) { @match_list = ($_ =~ /HIT/g); $count=$count+@match_list; } close(FILE); print "Count = $count\n"; exit
參考:string
http://www.yesky.com/409/1701409_2.shtmlit