[Namazu-devel-ja 151] Re: Win98 での pltest Re: utf8index-branch

Yukio USUDA m6694ha392t @ asahi-net.or.jp
2004年 9月 11日 (土) 20:40:24 JST


臼田です

Tadamasa Teranishi wrote:
> 
> この場合、配列のハッシュを作るので、その分余計に実際に使われる
> メモリが増加します。個々のデータ長が短く、個数が多い場合は、
> 余分に消費するメモリ量はバカにできなくなるかもしれません。
> 
下記のようなスクリプトを
cygwin の perl で実行してタスクマネージャーで
動作状況を眺めてみました。

%keyindex = ();
@words;

sub sub1 {
    $n = 0;
    for $word (@words){
	$n++;
	push(@{$keyindex{$word}}, "[$n]");
    }
    for $word (keys %keyindex){
	$ids = join("", @{$keyindex{$word}});
	print $word, ":", $ids, "\n";
    }
}

sub sub2 {
    $n = 0;
    for $word (@words){
	$n++;
	$keyindex{$word} .= "[$n]";
    }
    for $word (keys %keyindex){
	print $word, ":", $keyindex{$word}, "\n";
    }
}

for ( $i = 1; $i <= 3000000; $i++ ) {
    $word = sprintf("%c", rand(25)+65) . sprintf("%c", rand(25)+65);
    push(@words, $word);
}

my $etime = time();
#sub1;
sub2;
print time - $etime;

sub1 と sub2 を比較すると
寺西さんのおっしゃるとおりで、
配列のハッシュにした場合はメモリの消費量が少し増えました。
それ以上に処理時間が数倍増えてしまい、元のものより悪くなる
ことがわかりました。

臼田幸生




Namazu-devel-ja メーリングリストの案内