>> local $Log::Log4perl::caller_depth =
>> $Log::Log4perl::caller_depth + 2;
>
> I should have said I knew I could do this but a) there
> are an awful lot of methods b) when logging is not
> enabled each method has the overhead of the above
> statement for nothing.
Well, that's true, but the overhead is dwarfed by what it's already
costing you to subclass the DBI methods. On my box I can process
196,002 child-method calls per second, and that decreases to 176,991
calls per second when adding the manipulation of $caller_depth. On the
other hand, calling the parent method would have run at 1,689,189 per
second.
And you could probably improve the performance of manipulating
$caller_depth by skipping it unless $h->{logger}->is_debug is true.
call_local: 3 wallclock secs ( 1.92 usr + 0.00 sys = 1.92 CPU) @
2604166.67/s (n=5000000)
child_with_local: 29 wallclock secs (28.19 usr + 0.06 sys = 28.25 CPU)
@ 176991.15/s (n=5000000)
childmethod: 26 wallclock secs (25.47 usr + 0.04 sys = 25.51 CPU) @
196001.57/s (n=5000000)
supermethod: 3 wallclock secs ( 2.95 usr + 0.01 sys = 2.96 CPU) @
1689189.19/s (n=5000000)
----------------
use strict;
use Benchmark;
$Log::Log4perl::caller_depth = 0;
{ package testpackage;
sub runmethod {}
}
{ package child::testpackage;
push our @ISA, 'testpackage';
sub runmethod {
my($sth, @args) = @_;
my $h = $sth->{private_DBIx_Log4perl};
my $res = $sth->SUPER::runmethod(@args);
}
#the same thing, but with a local() call added
sub runmethod_with_local {
my($sth, @args) = @_;
local $Log::Log4perl::caller_depth =
$Log::Log4perl::caller_depth + 2
if ;
my $h = $sth->{private_DBIx_Log4perl};
my $res = $sth->SUPER::runmethod(@args);
}
}
my $dbh = {};
bless $dbh, 'testpackage';
my $dbhX = {private_DBIX_Log4perl => 1};
bless $dbhX, 'child::testpackage';
my @args = (1,2,3);
timethese( 5000000, {
supermethod => sub { $dbh->runmethod(@args) },
childmethod => sub { $dbhX->runmethod(@args) },
child_with_local => sub { $dbhX->runmethod_with_local(@args) },
call_local => sub { local $Log::Log4perl::caller_depth =
$Log::Log4perl::caller_depth + 2; },
});
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
log4perl-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/log4perl-devel