我的程序使用兩個大型文本文件(百萬行)。這些文件被解析並加載到散列中,以便可以快速訪問數據。我面臨的問題是,目前解析和加載是程序中最慢的部分。以下是完成此操作的代碼。增加大文件的加載速度
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