[첫화면으로]Perl/Archive-Zip

마지막으로 [b]

11 번째 수정본
(11 번째 수정본부터 11 번째 수정본까지의 변경사항) (소소한 수정)
(두 수정본의 내용이 동일하거나, 수정본을 비교할 수 없음.)
Cpan:Archive::Zip

Zip 압축파일을 만들거나 풀 때 사용하는 모듈.

1. 반복적인 read() 호출과 extract() 관련 문제점
1.1. 실험1
1.2. 실험2
1.3. 실험3
1.4. 중간 결론
2. 기타 & Comments

1. 반복적인 read() 호출과 extract() 관련 문제점

[스무번째 날: Gearman 사용 사례 -- 펄 크리스마스 달력 #2013] 기사를 작성하는 도중에 발견.

1.1. 실험1

일단 한 번만 read()하고, 루프를 돌며 2만번 extract()하는 테스트.

# Archive::Zip 오브젝트 생성
my $zip = Archive::Zip->new();

# 압축 파일을 한번만 읽고
$zip->read($file) == AZ_OK;

for my $num ( 1 .. 20000 ) {
    # 특정 파일을 추출을 2만번 반복
    $zip->extractMemberWithoutPaths($member);
}

결과:
1000, 0.000000, 0.000742    <-- 매 천 번 반복하는 동안 read()와 extract..()의 평균 실행 시간
2000, 0.000000, 0.000750
3000, 0.000000, 0.000746
4000, 0.000000, 0.000768
5000, 0.000000, 0.000772
6000, 0.000000, 0.000771
7000, 0.000000, 0.000756
8000, 0.000000, 0.000649
9000, 0.000000, 0.000626
10000, 0.000000, 0.000754
11000, 0.000000, 0.000764
12000, 0.000000, 0.000764
13000, 0.000000, 0.000583
14000, 0.000000, 0.000658
15000, 0.000000, 0.000495
16000, 0.000000, 0.000514
17000, 0.000000, 0.000608
18000, 0.000000, 0.000589
19000, 0.000000, 0.000708
20000, 0.000000, 0.000760
  time    vsz (  diff)    rss (  diff) shared (  diff)   code (  diff)   data (  diff)
     0  94868 ( 94868)   8920 (  8920)   2068 (  2068)   1412 (  1412)   7136 (  7136) before loop
    14  94868 (     0)   8968 (    48)   2096 (    28)   1412 (     0)   7136 (     0) after loop

1.2. 실험2

이번에는 2만번 루프를 돌면서 매번 read()하고 extract()하는 테스트.

# Archive::Zip 오브젝트 생성
my $zip = Archive::Zip->new();

for my $num ( 1 .. 20000 ) {
    # 압축 파일을 매번 읽고
    $zip->read($file);

    # 특정 파일을 추출
    $zip->extractMemberWithoutPaths($member);
}

결과:
1000, 0.000462, 0.000902
2000, 0.000469, 0.001179
3000, 0.000461, 0.001391
4000, 0.000450, 0.001615
5000, 0.000409, 0.001711
6000, 0.000355, 0.001777
7000, 0.000351, 0.001891
8000, 0.000394, 0.002372
9000, 0.000403, 0.002621
10000, 0.000384, 0.002761
11000, 0.000334, 0.002657
12000, 0.000383, 0.003267
13000, 0.000389, 0.003607
14000, 0.000453, 0.004447
15000, 0.000339, 0.003767
16000, 0.000423, 0.004907
17000, 0.000402, 0.005094
18000, 0.000412, 0.005584
19000, 0.000437, 0.006368
20000, 0.000446, 0.006684
  time    vsz (  diff)    rss (  diff) shared (  diff)   code (  diff)   data (  diff)
     0  94872 ( 94872)   8884 (  8884)   2036 (  2036)   1412 (  1412)   7140 (  7140) before loop
    74  173532 ( 78660)  87472 ( 78588)   2096 (    60)   1412 (     0)  85800 ( 78660) after loop

Upload:extractMemberWithoutPaths.png
(실험1과 실험2에서 extract 함수의 실행시간 비교)

1.3. 실험3

이건 확인 차원에서, 반대로 read 만 2만번 반복하게 한 것.

# Archive::Zip 오브젝트 생성
my $zip = Archive::Zip->new();

for my $num ( 1 .. 20000 ) {
    # 압축 파일을 매번 읽고, 추출은 하지 않음
    $zip->read($file);
}

결과:
1000, 0.000449, 0.000000
2000, 0.000444, 0.000000
3000, 0.000442, 0.000000
4000, 0.000444, 0.000000
5000, 0.000442, 0.000000
6000, 0.000446, 0.000000
7000, 0.000443, 0.000000
8000, 0.000449, 0.000000
9000, 0.000446, 0.000000
10000, 0.000422, 0.000000
11000, 0.000355, 0.000000
12000, 0.000286, 0.000000
13000, 0.000285, 0.000000
14000, 0.000287, 0.000000
15000, 0.000286, 0.000000
16000, 0.000296, 0.000000
17000, 0.000303, 0.000000
18000, 0.000308, 0.000000
19000, 0.000327, 0.000000
20000, 0.000445, 0.000000
  time    vsz (  diff)    rss (  diff) shared (  diff)   code (  diff)   data (  diff)
     0  94868 ( 94868)   8880 (  8880)   2036 (  2036)   1412 (  1412)   7136 (  7136) before loop
     8  171756 ( 76888)  85876 ( 76996)   2076 (    40)   1412 (     0)  84024 ( 76888) after loop

1.4. 중간 결론

2. 기타 & Comments

이름:  
Homepage:
내용:
 

컴퓨터분류

이 수정본 편집일: 2013-12-20 5:46 pm (변경사항 [d])
1662 hits | Permalink | 변경내역 보기 [h] | 현재 수정본 보기 | 11 번째 수정본 소스 보기