2010-04-09 29 views
1

我的Perl腳本有奇怪的行爲,我不明白。我正在處理存儲爲散列數組的大型結構,這些數據在處理時正在增長。問題是,當我將它存儲在hdd上時,結構大約有8mb,但在處理時需要大約130mb的ram。爲什麼有這麼大的差異?問題與克隆和大型結構處理

等待處理的主要流程是這樣的:

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

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

    push @$elements_ref, \%new_el; 
} 

回答

1

比你需要你正在數據多了份。試着用hashrefs工作,而不是提領,儘可能:

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

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

    push @$elements_ref, $new_el; 
} 

更妙的是不能克隆整個哈希 - 也許你可以就地改變它脫身?

+0

但它有什麼變化?什麼意思是我製作的副本比我需要的多?我不明白。我已經按照您的建議更改了代碼,但它在更多用法中沒有改變。 – jesper 2010-04-09 19:00:42

+0

處理哈希和hashrefs的區別在於你沒有複製所有的鍵和值 - 但如果你沒有看到任何改進,你將不得不研究如何以及爲什麼你要複製數據,並處理你的數據在更小的塊中。 – Ether 2010-04-10 16:22:14