2011-10-03 4 views
0

Hej sharp mind!txt 파일을 perl의 해시로 읽어들입니다.

해시에 텍스트 파일을로드해야합니다. 한 줄은 열쇠이고, 다음 줄은 값입니다. 그리고 그것은 수백만 번 반복됩니다. 가장 좋은 방법으로 어떤 방법을 제안합니까?

키가 15 자이고 값이 50 자라고하면 해시 테이블에 필요한 메모리 양은 어느 정도입니까?

감사

답변

5

다음 코드 해쉬 텍스트 파일을로드한다 :

my %hash; 

while (chomp(my $key = <DATA>)) { 
    chomp(my $val = <DATA>); 
    $hash{$key} = $val; 
} 

해시 엔트리의 메모리 오버 헤드의 구조에 의존 할 것이다 (32 대 64 비트)되어야하지만 해시 자체에 대한 몇 백 바이트 순서대로, 그리고 키와 값 당 약 30-60 바이트와 키와 값 데이터 유형의 오버 헤드를 더한 것입니다. Devel::Size을 사용하여 직접 확인할 수 있습니다. 또한 read this. 사용자의 예에 따라서

64 비트 플랫폼 백만 항목 대략 비용해야

136 해시위한

58 + 15 + 58 + 50 == 181 키/값 쌍마다 x 1,000,000

181MB (지정한 크기의 백만 항목)

+0

정보 답변 주셔서 감사합니다. 정확히 내가 찾던 것이 었어. – iggy

+0

. "chome에서 ./test.pl 16 번째 줄, 줄 10000"의 초기화되지 않은 $ key를 사용합니다. " 그게 테스트 파일의 마지막 줄이야 ... 나는 $ key가 undef가되는 것을 본다. 그러나 이것을 해결할 방법이 있는가? – iggy

+0

@iggy : 루프를 계속하기 전에'no warnings '초기화되지 않은''pragma 블록에 코드를 래핑하거나'chomp'에서 읽기 ('<>')를 분리하고 키/값의 정의를 검사 할 수 있습니다. 이것은 단지 예제 코드 일 뿐이며, 물론 사용자의 필요에 맞게 미세 조정이 필요합니다 ... –

관련 문제