![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
timethis - run a chunk of code several times
timethese - run several chunks of code several times
timeit - run a chunk of code and see how long it goes
timethis ($count, "code");
# Use Perl code in strings... timethese($count, { 'Name1' => '...code1...', 'Name2' => '...code2...', });
# ... or use subroutine references. timethese($count, { 'Name1' => sub { ...code1... }, 'Name2' => sub { ...code2... }, });
$t = timeit($count, '...other code...') print "$count loops of other code took:",timestr($t),"\n";
use Benchmark; $t0 = new Benchmark; # ... your code here ... $t1 = new Benchmark; $td = timediff($t1, $t0); print "the code took:",timestr($td),"\n";
$Benchmark::Debug
flag:
debug Benchmark 1; $t = timeit(10, ' 5 ** $Global '); debug Benchmark 0;
Returns: a Benchmark object.
timestr()
below.
timethis(COUNT, VALUE, KEY, STYLE)
timestr().
timediff().
STYLE can be any of 'all', 'noc', 'nop' or 'auto'. 'all' shows each of the 5 times available ('wallclock' time, user time, system time, user time of children, and system time of children). 'noc' shows all except the two children times. 'nop' shows only wallclock and the two children times. 'auto' (the default) will act as 'all' unless the children times are both zero, in which case it acts as 'noc'.
FORMAT is the printf(3)-style format specifier (without the leading '%') to use to print the times. It defaults to '5.2f'.
($real, $user, $system, $children_user, $children_system)
in seconds for the whole loop (not divided by the number of rounds).
The timing is done using time(3)
and times(3).
Code is executed in the caller's package.
The time of the null loop (a loop with the same number of rounds but empty loop body) is subtracted from the time of the real loop.
The null loop times are cached, the key being the number of rounds. The caching can be controlled using calls like these:
clearcache($key); clearallcache();
disablecache(); enablecache();
The real time timing is done using time(2)
and the granularity
is therefore only one second.
Short tests may produce negative figures because perl can appear to take longer to execute the empty loop than a short test; try:
timethis(100,'1');
The system time of the null loop might be slightly more than the system time of the loop with the actual code and therefore the difference might end up being < 0.
March 28th, 1997; by Hugo van der Sanden: added support for code references and the already documented 'debug' method; revamped documentation.
$CommentsMailTo = "perl5@dcs.ed.ac.uk"; include("syssies_footer.inc");?>