加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在perl中“打印”文件的最快方法是什么?

发布时间:2020-12-16 06:20:49 所属栏目:大数据 来源:网络整理
导读:我一直在使用以下代码将perl脚本的输出写入文件一段时间: open( OUTPUT,":utf8",$output_file ) or die "Can't write new file: $!";print OUTPUT "First line I want printedn";print OUTPUT "Another line I want printingn";close(OUTPUT); 这是有效的
我一直在使用以下代码将perl脚本的输出写入文件一段时间:

open( OUTPUT,">:utf8",$output_file ) or die "Can't write new file: $!";

print OUTPUT "First line I want printedn";
print OUTPUT "Another line I want printingn";

close(OUTPUT);

这是有效的,并且比我使用“说”而不是打印的初始方法更快(感谢NYTProf对我的启发!)

但是,我当前的脚本循环遍历数十万行,并且使用此方法需要花费数小时才能运行,而NYTProf正在指向我的数千个’print’命令.所以,问题是……有更快的方法吗?

其他可能相关的信息……
Perl版本:5.14.2(在Ubuntu上)

有问题的脚本的背景……
一些’|’分隔的平面文件正被读入哈希值,每个文件都有一些主键匹配条目从一个到另一个.我正在操纵这些数据,并将它们组合成一个文件以导入另一个系统.

输出文件大约是300万行,并且在向所述文件写入大约30,000行之后程序开始显着减慢. (有点阅读似乎指向其他语言的写缓冲区耗尽但我无法找到关于perl的任何内容?)

编辑:我现在尝试在open()语句之后添加下面的行,以禁用打印缓冲,但程序仍然在第30,000行左右减速.

OUTPUT->autoflush(1);

解决方法

我认为你需要重新设计你的程序使用的算法.文件输出速度不受已输出数据量的影响,并且您的程序更有可能正在读取和处理数据但不会释放它.

>检查进程使用的内存量,以查看它是否无情地增加>注意(< $filehandle>)循环,它将整个文件一次读入内存>正如我在评论中所说,禁用相关的打印语句以查看性能如何变化

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读