我的Perl脚本有奇怪的行为,我不明白。我正在处理存储为哈希数组的大型结构,这些哈希在处理时正在增长。问题是当我将它存储在硬盘驱动器上时,结构大约有8mb,但是在处理它时需要大约130mb的ram。为什么会有这么大的差异?
主要的处理流程如下:
while(...)
{
my %new_el = %{Storable::dclone \%some_el};
# ...
# change a few things in new_el
# ...
push @$elements_ref, \%new_el;
}
答案 0 :(得分:1)
您正在制作比您需要的更多数据副本。尝试使用hashrefs而不是解除引用,尽可能:
while (...)
{
my $new_el = Storable::dclone \%some_el;
# ...
# change a few things in new_el
# ...
push @$elements_ref, $new_el;
}
更好的方法是不克隆整个哈希值 - 或许你可以在原地改变它吗?