내 프로그램에서 사용하는 두 개의 큰 텍스트 파일 (수백만 줄)이 있습니다. 이러한 파일은 해시에 구문 분석되고로드되어 데이터에 빠르게 액세스 할 수 있습니다. 내가 직면 한 문제는 현재 파싱 및 로딩이 프로그램에서 가장 느린 부분이라는 것입니다. 다음은이 작업이 수행되는 코드입니다.대용량 파일의로드 속도 증가
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.
- 표준 루비 스레드.
- 프로세스를 포크하고 파이프를 통해 해시를 검색합니다.
C 확장 프로그램 작성 방법은 무엇입니까? – CodeJoust
Ruby 1.8 또는 1.9를 사용하고 있습니까? 1.9는 1.8보다 10-20 % 더 빠르다. (이런 종류의 윈도우에서는 윈도우가 훨씬 더 커진다.) – Digikata
1.9.1을 사용하고 있습니다. –