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