`
st780206
  • 浏览: 47906 次
  • 性别: 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替换脚本(用于替换文本文件中的单词)

    在实际使用中,这个脚本可以极大地提高在多个文件中统一替换文本的效率,特别是在配置文件维护或代码更新时,可以避免手动逐个修改的繁琐工作。 需要注意的是,使用Perl替换脚本时,要确保所有涉及的文件编码一致,...

    Perl读写excel

    它能够读取Excel文件中的工作簿、工作表和单元格内容。下面是一个简单的例子: ```perl use Spreadsheet::ParseExcel; my $parser = Spreadsheet::ParseExcel-&gt;new(); my $workbook = $parser-&gt;parse('example....

    perl 中文网页教程

    3. **文件和I/O操作**:Perl可以方便地读写文件,进行文件及目录操作,以及处理标准输入输出和管道。 4. **模块系统**:Perl拥有丰富的CPAN(Comprehensive Perl Archive Network)模块库,通过`use`关键字可以方便...

    Perl语言参考手册中文htmlPerl语言参考手册中文html

    7. **文件操作**:Perl提供了一系列内建的文件处理函数,如open、close、readline、seek等,可以方便地进行文件读写和文件指针操作。 8. **异常处理**:Perl使用eval和die来处理异常情况,eval用于捕获运行时错误,...

    Perl程序如何调用C代码

    为了使 XS 文件能够在 Perl 中使用,需要对其进行编译。这个过程通常涉及以下步骤: 1. **转换 XS 文件**:使用 `xsubpp` 将 .xs 文件转换成 C 源代码。 2. **编写 Makefile**:创建一个 Makefile 来编译生成的 C ...

    PERL5中文教程详解

    5. **文件和I/O操作**:Perl可以方便地进行文件读写,包括打开、关闭、读取和写入文件。此外,还可以处理管道、套接字和其他I/O流。 6. **模块使用**:通过`use`或`require`语句引入CPAN上的模块,可以快速地引入...

    可以直接生成tb的perl脚本

    1. **代码生成**:Perl脚本可以从高层规格或者设计描述文件中提取信息,自动生成测试平台的框架代码,包括必要的信号声明、初始化序列、时钟和复位逻辑等。 2. **随机化激励生成**:在测试平台上,我们经常需要生成...

    perl学习手札中文

    - **文件和目录操作**:Perl提供了丰富的内建函数来读写文件、处理目录和文件路径。 - **模块**:Perl模块是封装代码的单元,可以方便地导入和使用其他开发者编写的库。 - **对象导向编程**:Perl支持面向对象的编程...

    命令行中执行单行Perl脚本

    -n选项使得Perl能够在循环中逐行读取文件,但不会自动输出这些行。这非常适合于处理文本文件时的过滤和搜索操作。例如,若想输出`/etc/passwd`文件中包含“root”的行,则可以使用: ```bash perl -ne 'print if /...

    Perl读写文件简单示例

    通过本文的介绍,读者将能够掌握如何在Perl中打开文件、向文件写入数据以及读取文件内容的技能。 首先,了解Perl中打开文件的命令是基础。在Perl中打开文件通常使用open函数。在给定内容中,可以看到使用了open函数...

    使用perl替换文本中的字符

    本文将详细介绍如何使用Perl来替换文本文件中的特定字符或字符串,同时确保直接对原文件进行修改而无需创建临时文件。 ### 使用Perl替换文本中的字符 #### 一、Perl简介 Perl是一种高级编程语言,特别适合于文本...

    Perl语言在电路设计中的应用

    1. **功能测试:** Perl脚本可以根据芯片的规格自动产生测试文件,这些测试文件包含了在多个时钟周期内反复读写存储单元的操作。这样的测试案例有助于确保每个存储单元都能正确地进行读写操作。 2. **时序验证:** ...

    可以自动生成Verilog的Testbench的Perl脚本

    在本场景中,"可以自动生成Verilog的Testbench的Perl脚本" 提供了一种自动化创建Testbench的方法,极大地提高了设计验证的效率。 Perl脚本通过解析Verilog源代码,可以自动识别模块接口,生成相应的Testbench结构。...

    Perl开发环境.zip

    - **系统交互**:Perl可以轻松与操作系统进行交互,执行系统命令,读写文件,控制进程等。 对于初学者,了解Perl的基本语法和常用模块是必要的。例如,`if`语句、`for`和`while`循环、数组和哈希数据结构、子程序...

    perl语言中文教程,学习ic必须的

    3. **文件和I/O操作**:如何打开、读写文件,处理标准输入/输出,以及如何进行高级的文件操作。 4. **模块和CPAN**:Perl拥有丰富的第三方模块库CPAN(Comprehensive Perl Archive Network),教程会介绍如何查找和...

    Perl中使用Win32_OLE模块读写Excel的方法1

    2. **灵活性**:Perl的语法灵活且强大,使得编写读写Excel的脚本更为简便,适应各种复杂的文件处理需求。 3. **效率**:Perl的执行速度较快,适合处理大量数据和自动化任务,比如批量处理Excel表格。 4. **集成性*...

    perl实现多线程详解[整理].pdf

    Perl 多线程实现详解 Perl 是一种功能强大的高级编程语言,它提供了多种方法来实现多线程编程。多线程编程是指在同一个进程中...Perl 语言中多线程实现可以提高程序的执行效率和响应速度,但需要注意一些问题和技术。

Global site tag (gtag.js) - Google Analytics