Xpoint
   [напомнить пароль]

Тестирование скорости выполнения фрагментов кода

Микротесты производительности:

  • Выносите вызовы функций, возращающие постоянные значения, за пределы циклов. Даже на создание временных переменных тратится время.
use Benchmark qw(cmpthese);

my $n = 1; # кол-во вызовов внутри цикла
my $obj = new Dummy;
cmpthese (-5, {
        'with $dbh' => sub { $obj->w_cache(); },
        'without $dbh' => sub { $obj->wo_cache() },
        });

package Dummy;
sub new { return bless { dbh => { foo => 'bar' } }, 'Dummy' }
sub dbh { my $self = shift; return $self->{'dbh'} }
sub w_cache { my $self = shift; my $dbh = $self->dbh; for(1 .. $n) {my $x = $dbh->{foo} } }
sub wo_cache { my $self = shift; for(1 .. $n) {my $x = $self->dbh->{foo} } }

Результаты:
Для $n == 1

Ratewithout $dbhwith $dbh
without $dbh97088/s---22%
with $dbh124348/s28%--

Для $n == 5

Ratewithout $dbhwith $dbh
without $dbh42956/s---46%
with $dbh80189/s87%--

This is perl, v5.8.5 built for i386-linux-thread-multi

Powered by POEM™ Engine Copyright © 2002-2005