今天看到一篇对比 perl, C, C++, Java 效率的博文
把C 和 Perl的代码摘下来, 从1500万行的文件中查找指定字符串,他的机器用C 2分多完成,C++ 4分多完成,perl是8分多完成。
C代码如下:
#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
参考:
http://www.yesky.com/409/1701409_2.shtml
转载于:https://blog.51cto.com/matrix6ro/1890618