#!/usr/bin/perl
use strict;
use warnings;
use GTop();
use Time::HiRes;
my($gtop,$max,%h,@t);
$gtop=new GTop;
$t[0]=Time::HiRes::time();
printf "###count=$ARGV[1],$ARGV[0]###\n";
p("before");
$max=$ARGV[1];
%h=map { $_ => "test" } (1 .. $max);
p("after hash");
if ($ARGV[0] eq "keys"){
&with_keys();
} elsif($ARGV[0] eq "each") {
&with_each();
} else {
print "else\n";
}
p("after loop");
$t[1]=Time::HiRes::time();
printf "time=%.3f\n", ($t[1]-$t[0]);
exit;
####
perl tmp.pl keys 10000 > log
perl tmp.pl each 10000 >> log
perl tmp.pl keys 100000 >> log
perl tmp.pl each 100000 >> log
perl tmp.pl keys 1000000 >> log
perl tmp.pl each 1000000 >> log
perl tmp.pl keys 2000000 >> log
perl tmp.pl each 2000000 >> log
##
##
###count=10000,keys###
before: size=10035200,vsize=10035200,resident=5500928,share=5143114,rss=5500928
after hash: size=13180928,vsize=13180928,resident=8306688,share=5143114,rss=8306688
after loop: size=13180928,vsize=13180928,resident=8376320,share=5143114,rss=8376320
time=0.043
###count=10000,each###
before: size=10035200,vsize=10035200,resident=5541888,share=5143114,rss=5541888
after hash: size=13180928,vsize=13180928,resident=8347648,share=5143114,rss=8347648
after loop: size=13180928,vsize=13180928,resident=8417280,share=5143114,rss=8417280
time=0.050
###count=100000,keys###
before: size=10035200,vsize=10035200,resident=5541888,share=5143114,rss=5541888
after hash: size=43589632,vsize=43589632,resident=39514112,share=5143114,rss=39514112
after loop: size=43589632,vsize=43589632,resident=39514112,share=5143114,rss=39514112
time=0.689
###count=100000,each###
before: size=10035200,vsize=10035200,resident=5541888,share=5143114,rss=5541888
after hash: size=43589632,vsize=43589632,resident=39514112,share=5143114,rss=39514112
after loop: size=43589632,vsize=43589632,resident=39514112,share=5143114,rss=39514112
time=0.799
###count=1000000,keys###
before: size=10035200,vsize=10035200,resident=5545984,share=5143114,rss=5545984
after hash: size=296296448,vsize=296296448,resident=282710016,share=5143114,rss=282710016
after loop: size=297345024,vsize=297345024,resident=282718208,share=5143114,rss=282718208
time=7.389
###count=1000000,each###
before: size=10035200,vsize=10035200,resident=5545984,share=5143114,rss=5545984
after hash: size=296296448,vsize=296296448,resident=282710016,share=5143114,rss=282710016
after loop: size=297345024,vsize=297345024,resident=282718208,share=5143114,rss=282718208
time=8.522
###count=2000000,keys###
before: size=10035200,vsize=10035200,resident=5545984,share=5143114,rss=5545984
after hash: size=582557696,vsize=582557696,resident=354185216,share=5143114,rss=354185216
after loop: size=583606272,vsize=583606272,resident=360177664,share=5143114,rss=360177664
time=103.454
###count=2000000,each###
before: size=10035200,vsize=10035200,resident=5484544,share=5143114,rss=5484544
after hash: size=582557696,vsize=582557696,resident=359972864,share=5143114,rss=359972864
after loop: size=583606272,vsize=583606272,resident=352419840,share=5143114,rss=352419840
time=268.264
##
##
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Benchmark qw/cmpthese timethese/;
my($max,%h);
$max=1000000;
%h=map { $_ => "test" } (1 .. $max);
sub with_keys{
foreach my $k (keys %h){
#no proc
}
}
sub with_each{
while( my($k,$v)=each %h){
#no proc
}
}
cmpthese(
timethese(
100,
{
'with keys'=> &with_keys,
'with each'=> &with_each,
}
)
);
##
##
Benchmark: timing 100 iterations of with each, with keys...
with each: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
(warning: too few iterations for a reliable count)
with keys: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
(warning: too few iterations for a reliable count)
Rate with each with keys
with each 100000000000000000/s -- 0%
with keys 100000000000000000/s 0% --