在Ruby中读取大文件的最快方法是什么?

use*_*342 7 ruby io performance ruby-on-rails file

我已经看到了这个问题的答案,但我无法弄清楚哪个答案会以最快的速度完成.这些是我见过的答案 - 哪个最好?

  1. 使用each或each_line一次读取一行
  2. 使用gets一次读取一行
  3. 使用readlines将它们全部保存到一个行数组中,然后使用每个行
  4. 使用grep(不确定与grep究竟有什么关系......)
  5. 使用sed(不确定与sed究竟有什么关系......)
  6. 别的什么?

另外,使用另一种语言或Ruby应该没问题会更好吗?

编辑:

更多细节:每行包含类似"id1 attr1_1 attr2_1 id2 attr1_2 attr2_2 ... idn attr1_n attr2_n"(n非常大),我需要将它们插入数据库.对于该示例行,我需要在数据库中插入n行.

mdu*_*uir 5

Ruby 可能会使用相同或非常相似的低级代码(用 C 编写)来实际从磁盘读取前三个选项,因此它们应该执行类似的操作。鉴于此,您应该选择最适合您的方式;正是这种能力使得 Ruby 这样的语言如此有用!您将从磁盘读取大量数据,因此我建议each_line您在读取时使用和处理每一行。

我不建议将grepsed或任何其他此类外部实用程序引入其中,除非您有充分的理由,因为它们会降低您的代码的可移植性,并使您面临可能难以诊断的故障。