我的程序使用两个大型文本文件(百万行)。这些文件被解析并加载到散列中,以便可以快速访问数据。我面临的问题是,目前解析和加载是程序中最慢的部分。以下是完成此操作的代码。增加大文件的加载速度
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扩展? – CodeJoust 2010-07-22 20:44:20
您使用的是Ruby 1.8还是1.9? 1.9可以比1.8快10-20%(在这种情况下,这是一个更大的增长)。 – Digikata 2010-07-22 22:40:08
我正在使用1.9.1 – 2010-07-23 17:33:15