【问题标题】:Issue with cloning and large structure processing克隆和大型结构处理的问题
【发布时间】:2010-04-09 17:15:26
【问题描述】:

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

处理的主要流程如下:

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

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

    push @$elements_ref, \%new_el; 
}

【问题讨论】:

    标签: perl hash clone large-data-volumes


    【解决方案1】:

    您制作的数据副本超出了您的需要。尽量使用 hashrefs 而不是取消引用:

    while (...)
    {
        my $new_el = Storable::dclone \%some_el;
    
        # ...
        # change a few things in new_el
        # ...
    
        push @$elements_ref, $new_el; 
    }
    

    最好不要克隆整个散列——也许你可以原地改变它?

    【讨论】:

    • 但是它改变了什么?什么意味着我制作的副本比我需要的多?我不明白。我已经按照您建议的方式更改了代码,但在记忆使用方面没有任何改变。
    • 处理散列和散列引用的区别在于你没有复制所有的键和值——但是如果你没有看到任何改进,你将不得不检查你如何以及为什么要复制数据,并以较小的块处理您的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2010-11-20
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    相关资源
    最近更新 更多