At this point, I call 'not it'...but only because I really don't know what in the hell is going on.
Two brand new fresh FreeBSD 6.2 installs. One with a a compiled (not
ports) Perl 5.8.8 and the other with a compiled 5.10.0.
The test case is simple set_inherited, sans C::A::G in the picture,
since the reporter noted set was slower as well (which BTW has no MRO
interaction):
test.pl
> use lib '.';
> use Foo;
> use Benchmark ':all';
>
> my $f = bless {}, 'Foo';
>
> timethese(0, {
> set_inherited_class => sub {Foo->set_inherited('bar', 'baz')},
> set_inherited_object => sub {$f->set_inherited('bar', 'baz')}
> });
Foo.pm
> package Foo;
> use Scalar::Util qw/blessed reftype/;
>
> sub set_inherited {
> my ($self, $set, $val) = @_;
>
> if (blessed $self) {
> if (reftype $self eq 'HASH') {
> return $self->{$set} = $val;
> } else {
> croak('Cannot set inherited value on an object instance that is
> not hash-based');
> };
> } else {
> no strict 'refs';
>
> return ${$self.'::__cag_'.$set} = $val;
> };
> }
>
> 1;
The results are:
Perl 5.8.8 Machine:
> Benchmark: running set_inherited_class, set_inherited_object for at least 3
> CPU seconds...
> set_inherited_class: 4 wallclock secs ( 3.16 usr + 0.00 sys = 3.16 CPU) @
> 575596.40/s (n=1821223)
> set_inherited_object: 3 wallclock secs ( 3.16 usr + -0.01 sys = 3.15 CPU) @
> 687794.82/s (n=2165479)
> [EMAIL PROTECTED] ~ $
Perl 5.10.0 Machine:
> Benchmark: running set_inherited_class, set_inherited_object for at least 3
> CPU seconds...
> set_inherited_class: 3 wallclock secs ( 3.12 usr + 0.01 sys = 3.13 CPU) @
> 335388.09/s (n=1050708)
> set_inherited_object: 2 wallclock secs ( 3.15 usr + 0.00 sys = 3.15 CPU) @
> 412676.76/s (n=1299287)
> [EMAIL PROTECTED] ~ $
My to my shock, if I whittle down the code in set_inherited to just this:
> package Foo;
> use Scalar::Util qw/blessed reftype/;
>
> sub set_inherited {
> my ($self, $set, $val) = @_;
>
> }
>
> 1;
performance still seriouesly sucks:
5.8.8
> Benchmark: running set_inherited_class, set_inherited_object for at least 3
> CPU seconds...
> set_inherited_class: 3 wallclock secs ( 3.08 usr + 0.02 sys = 3.09 CPU) @
> 1199923.07/s (n=3712262)
> set_inherited_object: 4 wallclock secs ( 3.27 usr + 0.00 sys = 3.27 CPU) @
> 1380589.06/s (n=4519272)
> [EMAIL PROTECTED] ~ $
5.10.0
> Benchmark: running set_inherited_class, set_inherited_object for at least 3
> CPU seconds...
> set_inherited_class: 4 wallclock secs ( 3.09 usr + 0.01 sys = 3.10 CPU) @
> 536733.34/s (n=1664712)
> set_inherited_object: 4 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @
> 638055.42/s (n=1998908)
> [EMAIL PROTECTED] ~ $
A this point, I'm stumped.
-=Chris
signature.asc
Description: OpenPGP digital signature
_______________________________________________ List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class IRC: irc.perl.org#dbix-class SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/ Searchable Archive: http://www.grokbase.com/group/[EMAIL PROTECTED]
