我一直在使用以下代码将perl脚本的输出写入文件:
open( OUTPUT, ">:utf8", $output_file ) or die "Can't write new file: $!";
print OUTPUT "First line I want printed\n";
print OUTPUT "Another line I want printing\n";
close(OUTPUT);
这行得通,并且比我最初使用“say”而不是打印品的初始方法要快(感谢NYTProf启发我!)
但是,我当前的脚本正在遍历数十万行,并且使用此方法要花费许多小时才能运行,而NYTProf却将矛头指向了我成千上万的“打印”命令。因此,问题是... 是否有更快的方法?
其他可能相关的信息...
Perl版本:5.14.2(在Ubuntu上)
有问题的脚本的背景...
多个“|”分隔的平面文件被读入哈希,每个文件都有某种主键匹配项,从另一个到另一个。我正在处理这些数据,并将它们组合到一个文件中,以导入到另一个系统中。
输出文件大约有300万行,在向该文件写入大约30,000行后,程序开始明显变慢。 (稍微阅读一下似乎会发现其他语言的写缓冲区已用完,但是在perl方面我什么都找不到吗?)
编辑:我现在尝试在open()语句之后添加以下行以禁用打印缓冲,但是该程序在第30,000行附近仍然变慢。
OUTPUT->autoflush(1);
最佳答案
我认为您需要重新设计程序使用的算法。文件输出速度不受已输出数据量的影响,程序更有可能正在读取和处理数据但未释放数据。
for (<$filehandle>)
循环,该循环立即将整个文件读入内存中print
语句以查看性能如何改变关于perl - 'print'在perl中归档的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9649957/