在Ruby中读取输入的最有效方法

在Ruby中,读取巨型文本文件的最有效方法是什么? 大约10 7行,89字节/行。 一种方法明显优于另一种吗?

我做了一些基准测试,看看加载文本文件的好方法。 最快的是读取文本块,然后使用String.lines迭代它们。

读取188,593,869字节的文本文件作为基线:

IO.foreach(ARGV.shift) do |li| print li end time ruby test.rb root.mbox > /dev/null # # real 0m3.949s # user 0m3.709s # sys 0m0.182s 

我将其转储到/ dev / null以从时间中删除屏幕I / O.

而不是逐行读取,将其加载到一个大块中然后迭代线:

 File.read(ARGV.shift).lines do |l| print l end time ruby test.rb root.mbox > /dev/null real 0m3.492s user 0m3.281s sys 0m0.209s 

那是0.5秒的节省。 它还吸收了188MB的数据,如果你有更大的文件,它几乎不能很好地扩展。 好的是你可以告诉它加载整个文件,我做了,使用read()或告诉它限制读取大小。

这是wc为文本文件清理的输出,供您参考:

 lines: 2,465,369 words: 26,466,463 bytes: 188,593,869