`
st780206
  • 浏览: 47403 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

perl中读取文件效率比较

阅读更多
因为文件行数少了测试不出来效果,我特意做了包含整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 楼 zhangmaocun 2013-12-09  
...方案6
用变量读取你测试的时候有注意数据的输出吗?
就读出来一行。。。。

相关推荐

    【效率提升-Perl脚本】根据Excel列表信息提取输入输出接口生成Verilog文件

    根据Excel列表信息提取输入输出接口生成Verilog文件

    产生testbench文件的perl脚本

    自动产生testbench文件,能够读取目标文件,并产生相应的testbench文件,并生成fsdb波形。需要使用者具有perl环境,使用方法为,如:perl gen_tb uart,注意这里不是uart.v 必须是uart,否则产生出来的是空文件。

    Maltab脚本(2020a)-解析asc文件Can信号(源码)

    1、该版本已部分优化,使用m语言以及perl语言编程,大幅提高效率; 2、资源为源码,附有部分注释; 3、脚本可以同时解析多个asc文件,命名方式为0.asc、1.asc,依次类推; 4、脚本可以同时解析多个Can信号,用户只需...

    QXls与Perl.zip

    Qt操作xlsx格式Excel所需开源库,该库无需调用excel和wps,可以直接读取写xlsx文件。效率高

    Redis如何实现数据库读写分离详解

    和Memcached类似,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。在部分场合可以对关系数据库...

    NTKO文档在线编辑控件4.0.1.2

    10 支持在提交编辑文档的同时,提交表单的其它数据,包括其它的文件上传 采用我们独创的“智能提交”技术,让您在提交编辑文档的同时,提交表单的其它数据,以及表单中其它的文件上传。这可以让您更加快速的集成现有...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    大气质量监测系统.zip

    树莓派开gpio读取传感器并上传云端,同时有触屏显示界面;跨平台客户端从云端读取数据,并作3d显示;用php写的微信公众号服务器程序,支持查询、订阅和报警;用Python写了机器学习的线性回归和在线学习,来预测第二...

    Linux操作系统基础教程

    在这一讲中,我们主要是了解一下 Linux 的概况,以及对 Linux 有一个初步的感性认识。 一.什么是Linux? Linux 是一个以 Intel 系列 CPU(CYRIX,AMD 的 CPU也可以)为硬件平台,完全免费的 UNIX 兼容系统,完全...

    redis-core-java.zip

    与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis 是一个高性能的key-...

    Redis-x64-3.0.500-rc1

    与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis 是一个高性能的key-...

    Redis API文档 全称:Remote Dictionary Server 远程字典服务

    与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis 是一个高性能的key-...

    Linux最早是Linus Torvalds在1991年开始设计开发

    1991年的夏季,也就是他购买了第一台PC机之后6个月,Linus觉得他还需要从网上下载某些文件,为此他必须读写某个磁盘。于是他又不得不写一个磁盘驱动程序,然后是一个文件系统。而一旦你有了任务切换器、文件系统和...

    PHP3程序设计

    文件中 198 12.11.2 生成错误处理HTML页面 199 12.12 表单处理 200 12.12.1 HTML简介 200 12.12.2 HTML表单 201 12.12.3 传递表单信息 203 12.13 总结 203 第13章 认证 205 13.1 HTTP认证 205 13.2 htaccess 认证 ...

    操作系统(内存管理)

    其次,它不仅可以将虚拟地址映射到物理的 RAM 或者 swap,它还可以将它们映射到文件和文件位置,这样,读写内存将对文件中的数据进行读写。不过,在这里,我们只关心 mmap 向进程添加被映射的内存的能力。 munmap() ...

Global site tag (gtag.js) - Google Analytics