【发布时间】:2010-07-22 20:39:50
【问题描述】:
我的程序使用了两个大文本文件(数百万行)。这些文件被解析并加载到哈希中,以便可以快速访问数据。我面临的问题是,目前,解析和加载是程序中最慢的部分。以下是完成此操作的代码。
database = extractDatabase(@type).chomp("fasta") + "yml"
revDatabase = extractDatabase(@type + "-r").chomp("fasta.reverse") + "yml"
@proteins = Hash.new
@decoyProteins = Hash.new
File.open(database, "r").each_line do |line|
parts = line.split(": ")
@proteins[parts[0]] = parts[1]
end
File.open(revDatabase, "r").each_line do |line|
parts = line.split(": ")
@decoyProteins[parts[0]] = parts[1]
end
文件看起来像下面的例子。它最初是一个 YAML 文件,但为了提高解析速度,修改了格式。
MTMDK: P31946 Q14624 Q14624-2 B5BU24 B7ZKJ8 B7Z545 Q4VY19 B2RMS9 B7Z544 Q4VY20
MTMDKSELVQK: P31946 B5BU24 Q4VY19 Q4VY20
....
我已经搞砸了设置文件和解析它们的不同方法,到目前为止这是最快的方法,但它仍然非常慢。
有没有办法提高这个速度,或者我可以采取其他方法吗?
不起作用的事情列表:
- YAML。
- 标准 Ruby 线程。
- 分叉进程,然后通过管道检索哈希。
【问题讨论】:
-
写一个C扩展怎么样?
-
您使用的是 Ruby 1.8 还是 1.9? 1.9 可以比 1.8 快 10-20%(在 Windows 上,这种情况的增长幅度更大)。
标签: ruby performance