1

私の Perl スクリプトには、理解できない奇妙な動作があります。処理中に成長するハッシュの配列として格納された大きな構造を処理しています。問題は、構造を hdd に保存すると最大 8 MB になることですが、処理中には約 130 MB の RAM が必要になります。なぜそんなに大きな違いがあるのですか?

処理の主な流れは次のようになります。

while(...)
{
    my %new_el = %{Storable::dclone \%some_el};

    # ...
    # change a few things in new_el
    # ...

    push @$elements_ref, \%new_el; 
}
4

1 に答える 1

1

必要以上にデータのコピーを作成しています。可能な限り、逆参照ではなく、ハッシュリファレンスを使用してみてください。

while (...)
{
    my $new_el = Storable::dclone \%some_el;

    # ...
    # change a few things in new_el
    # ...

    push @$elements_ref, $new_el; 
}

さらに良いのは、ハッシュ全体を複製しないことです-おそらく、その場で変更することで逃げることができますか?

于 2010-04-09T18:23:05.360 に答える