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

时间:2010-12-14 22:50:10

标签: ruby

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

1 个答案:

答案 0 :(得分:4)

我做了一些基准测试,看看加载文本文件的好方法。最快的是读取文本块,然后使用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