Ruby中each_char与getc(和analagous方法)的效率

时间:2012-07-10 16:50:18

标签: ruby file-io

迭代器方法如each_chareach_line如何。比较while-looped getcgets等读取大文件的方法?主要是,使用每种方法的开销是多少,哪一个会使用更多内存,哪一个会更快?

基本上,如果file是一个100MB的文本文件,哪个内存,开销和速度会更好?

file.each_char{
|ch|
    #process ch
}

VS

ch = ""
until(file.eof?)
    ch = file.getc
    #process ch
end

或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Ruby Standard Library's benchmark软件包轻松回答类似的问题。

  

或者有更好的方法吗?

我是这么认为的。虽然C程序可以合理地一次处理一个文件,但Ruby内置了一个高大的字符串和数组功能,这些都是用C编写的,所以它运行得很快。

将一行划分为单词然后只使用一些,或者只计算它们或其他任何东西似乎都没有效率,但它可能比一次解析该行一个字符要快得多,而且更容易阅读必要时重写。

一般来说,我建议Ruby程序利用库并尽可能多地处理尽可能抽象的对象。