On 4/19/05, Ley, Chung wrote:
> Hi,
> 
> I have a complex data structure using hash of hash of hash that I need to 
> hold one unit of 
> data that I need to process.  After finishing processing this unit, I need to 
> go to the 2nd 
> unit; each unit will be approx. 10Meg of data.
> 
> What is the "quick" and "efficient" way for me to release the memory of the 
> previous unit 
> so that I can go and reuse it again?
> 
> I tried a couple of following methods and neither seem to work....  Please 
> let me know if I 
> am doing something wrong or should I take another approach...
> 
> 1. Just set the hash to "empty"
> my %datahash;
> while (moredetail) {
>         $datahash{$level1}{$level2}{$level3}{$level4} = $something;
> }
> &processdata(\%datahash);
> 
> %datahash = ();
> 

This doesn't release the memory? How do you know?
Have you tried using Devel::Size [1] to see the size of %datahash
after the release?
What about Devel::Monitor [2]?
What happens if you do as the release:
$datahash{$level1}{$level2}{$level3}{$level4} = "";
Does that help?

If all else fails, you might consider using tied hashes. Read:
http://perldoc.perl.org/functions/tie.html
and
http://perldoc.perl.org/Tie/Hash.html

[1] http://search.cpan.org/dist/Devel-Size/
[2] http://search.cpan.org/dist/Devel-Monitor/

HTH,
-- 
Offer Kaye

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to