设为首页 收藏本站
查看: 735|回复: 0

[经验分享] perl中读取文件效率比较

[复制链接]

尚未签到

发表于 2017-5-19 09:29:14 | 显示全部楼层 |阅读模式
因为文件行数少了测试不出来效果,我特意做了包含整1万行的数据,大小170K
本机雷鸟1.1GHZ,内存256兆,IIS5.0 perliisdll环境
####################
方案一 while 输出 最常用
open (FILES, "index"); 3
while (<FILES>){
print;
}
close(FILES);
程序占用 CPU 时间:0.23 usr + 0.22 sys 合计运行时间 450 毫秒 n
#######################
方案二: 数组读取输出
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 毫秒 节省一点时间:)
################################ LC<Nw
方案三:
open (FILES, "index");
@_=<FILES>;
#print @_;
close(FILES);
foreach (@_){
print;
}
程序占用 CPU 时间:3.79 usr + 0.15 sys 合计运行时间 3940 毫秒
很奇怪,和上面相同,说明,只要打印数组,就和foreach处理方式相同
############################## r
方案4 不打印
open (FILES, "index");
@_=<FILES>;
#print @_;
close(FILES);
程序占用 CPU 时间:3.45 usr + 0.00 sys 合计运行时间 3450 毫秒 还是相同 7
更奇怪,少一次循环,为什么时间还相同
#########################################
方案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 毫秒
###############################################
散列 X
=$
-------------------------------------------------------------------------------- a*rS;
open (FILES, "index");
while (<FILES>){$i++;
$hash{$i}=($_)
}
print %hash;
close(FILES);
程序占用 CPU 时间:0.66 usr + 0.41 sys 合计运行时间 1070 毫秒
数组的最快方式是450毫秒,散列全部输出时间大概比数组慢一倍 |"
散列不输出TV7[
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>)
$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 毫秒
########################## (u
以上测试结果有的差别很大,有的差别不大
即使有些差别虽然是细微的,程序中如果把这些命令都采用最优化方式,相信会有效果的
我最近在把我的论坛调用比较频繁的核心代码进行逐行检查,反复测试优化中
谁把其他的方法都测试以下,拿出来给爱好者继续分享,我也继续测试中,今晚测试系统级IO命令,看有没有差别
仅供参考。
附,my测试方法
#########################st>
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 @_;
###########################YK
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;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378952-1-1.html 上篇帖子: perl-操作ole,比如操作word 下篇帖子: 用Perl查询天气并发送邮件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表