克隆和大型结构处理问题

时间:2010-04-09 17:15:26

标签: perl hash clone large-data-volumes

我的Perl脚本有奇怪的行为,我不明白。我正在处理存储为哈希数组的大型结构,这些哈希在处理时正在增长。问题是当我将它存储在硬盘驱动器上时,结构大约有8mb,但是在处理它时需要大约130mb的ram。为什么会有这么大的差异?

主要的处理流程如下:

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

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

    push @$elements_ref, \%new_el; 
}

1 个答案:

答案 0 :(得分:1)

您正在制作比您需要的更多数据副本。尝试使用hashrefs而不是解除引用,尽可能:

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

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

    push @$elements_ref, $new_el; 
}

更好的方法是不克隆整个哈希值 - 或许你可以在原地改变它吗?