note
space_monk
<p>A good piece of research, however the possibility exists that the two results are related and generating the first one also pre-generates the second one. I suggest that tests like these are best done in separate methods on separate data just to be sure.
<code>
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(:all) ;
my $n = 100000;
our %hash1;
@hash1{1..$n} = 1 x $n;
my $n2 = 100000;
our %hash2;
@hash2{1..$n2} = 1 x $n2;
my $n3 = 1000000;
our %hash3;
@hash3{1..$n3} = 1 x $n3;
cmpthese( 1000, {
'Method 1' => sub {
my @k = keys %hash1;
my $v = scalar @k;
},
'100K' => sub {
my $v = scalar keys %hash2;
},
'1 Mill' => sub {
my $v = scalar keys %hash3;
}
}
);
</code>
Results:
<code>
Rate Method 1 1 Mill 100K
Method 1 15.0/s -- -100% -100%
1 Mill 999999999999999872/s 6645700000000000000% -- 0%
100K 999999999999999872/s 6645700000000000000% 0% --
</code>
Note result appears to be same for 100k and 1Million entries in hash.
<div class="pmsig"><div class="pmsig-880879">
If you spot any bugs in my solutions, it's because I've deliberately left them in as an exercise for the reader! :-)
</div></div>
1034706
1034710