У моего скрипта Perl есть странное поведение, которое я не понимаю. Я обрабатываю большую структуру, хранящуюся как массив хешей, который растет во время обработки. Проблема в том, что структура имеет около max 8mb, когда я храню ее на hdd, но пока она обрабатывается, она занимает около 130 МБ оперативной памяти. Почему такая большая разница?Проблема с клонированием и обработкой большой структуры
Основной поток обрабатывающий выглядит следующим образом:
while(...)
{
my %new_el = %{Storable::dclone \%some_el};
# ...
# change a few things in new_el
# ...
push @$elements_ref, \%new_el;
}
Но что это значит? Что означает, что я делаю больше копий, чем мне нужно? Я не понимаю. Я меняю код так, как вы советуете, но ничего не меняет в использовании памяти. – jesper
Разница между обработкой хэшей и hashrefs заключается в том, что вы не делаете копии всех ключей и значений, но если вы не видите улучшения, вам нужно будет изучить, как и почему вы копируете данные и обрабатываете свои данные в небольших кусках. – Ether