our %RCache = (); keys( %RCache ) = 1020;
was in a different package to your reset subroutine: sub CheckMemoryUsage
{ our %RCache;
...
and that because you redeclared the hash locally to the reset sub, you were manipulating two different hashes. But that doesn't make sense as the ENTER size would then be zero.
I've been unable to reproduce your results in a simplified test: #! perl -slw
use strict;
use Devel::Size qw[ total_size ];
our %cache; keys %cache = 1020;
sub resetCache {
our %cache;
printf "Before: keys: %u size: %u\n",
scalar keys %cache,
total_size( \%cache );
%cache = ();
printf "After: keys: %u size: %u\n",
scalar keys %cache,
total_size( \%cache );
}
while( 1 ) {
$cache{ int( rand 2**32 ) } = chr(0) x 2048;
if( keys %cache >8192 ) {
resetCache();
}
}
__END__
C:\test>junk29
Before: keys: 8193 size: 17727631
After: keys: 0 size: 131144
Before: keys: 8193 size: 17727579
After: keys: 0 size: 131144
Before: keys: 8193 size: 17727590
After: keys: 0 size: 131144
Before: keys: 8193 size: 17727614
After: keys: 0 size: 131144
Before: keys: 8193 size: 17727556
After: keys: 0 size: 131144
Before: keys: 8193 size: 17727578
After: keys: 0 size: 131144
Before: keys: 8193 size: 17727621
After: keys: 0 size: 131144
...
And the question was me speculating about possible scenarios.
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
|