さっそく全部のクラスをimmutableにしてみて、差を計測してみた
# With Immutable Classes
timethis 10000: 32 wallclock secs (30.82 usr + 0.26 sys = 31.08 CPU) @ 321.75/s (n=10000)
# Without Immutable Classes
daisuke@beefcake-7 trunk$ perl benchmark.pl
timethis 10000: 75 wallclock secs (73.32 usr + 0.51 sys = 73.83 CPU) @ 135.45/s (n=10000)
わお!immutableしただけでこれかよ!
コードはこれだけだよ
use strict;
use Benchmark qw(timethis);
use Bread::Board;
timethis(10_000, sub {
my $c = container 'MyApp' => as {
service 'log_file_name' => "logfile.log";
service 'logger' => (
class => 'FileLogger',
lifecycle => 'Singleton',
dependencies => [
depends_on('log_file_name'),
]
);
container 'Database' => as {
service 'dsn' => "dbi:sqlite:dbname=my-app.db";
service 'username' => "user234";
service 'password' => "****";
service 'dbh' => (
block => sub {
my $s = shift;
DBI->connect(
$s->param('dsn'),
$s->param('username'),
$s->param('password'),
) || die "Could not connect";
},
dependencies => wire_names(qw[dsn username password])
);
};
service 'application' => (
class => 'MyApplication',
dependencies => {
logger => depends_on('logger'),
dbh => depends_on('Database/dbh'),
}
);
};
});
コメント