:utf8", $output_file ) or die "Can't write new fi-6ren">
gpt4 book ai didi

perl - 'print' 在 perl 中归档的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-04 23:27:55 24 4
gpt4 key购买 nike

一段时间以来,我一直在使用以下代码将 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);

这有效,并且比我最初使用“说”而不是打印的方法要快(感谢 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com