Co je rychlejsi ?
Honza Pazdziora
adelton na fi.muni.cz
Úterý Březen 31 10:22:41 MEST 1998
jvajda na somi.sk (Jan ' Kozo ' Vajda) writes:
> :> Chtel bych se jen zeptat, co je rychlejsi z nasledujicich dvou porovnani:
> :> if (($text eq 'neco') or ($text eq 'neco1')) {}
> :> if ($text =~ /^neco$|^neco1$/) {}
> :> nebo je jeste neco rychlejsiho?
> :> P.S. Kdyby to bylo i vysvetleno proc, byl bych moc rad.
>
> a co tak pozriet sa do mudrych knih, pripadne si to prehnat cez benchmarky ?
Ten benchmark je asi fakt nejjednodussi a protoze nekoho muze zajimat,
jak se to v Perlu dela, tak posilam priklad skriptu i vysledek:
use Benchmark;
timethese(15000, {
"eq" => sub { my $a = "jezek";
if ($a eq "krtek" or $a eq "lama") { print "1\n"; }},
"reg" => sub { my $a = "jezek";
if ($a =~ /^krtek$|^lama$/) { print "1\n"; }},
"reg2" => sub { my $a = "jezek";
if ($a =~ /^(krtek|lama)$/) { print "1\n"; }}
});
__END__
Benchmark: timing 15000 iterations of eq, reg, reg2...
eq: 2 secs ( 0.75 usr 0.01 sys = 0.76 cpu)
reg: 4 secs ( 1.45 usr 0.01 sys = 1.46 cpu)
reg2: 3 secs ( 1.12 usr 0.00 sys = 1.12 cpu)
je vysledek z Indy R4600,
Benchmark: timing 150000 iterations of eq, reg, reg2...
eq: 2 secs ( 1.61 usr 0.00 sys = 1.61 cpu)
reg: 2 secs ( 2.78 usr 0.00 sys = 2.78 cpu)
reg2: 3 secs ( 2.07 usr 0.00 sys = 2.07 cpu)
z UltraSparcu 170 a
Benchmark: timing 150000 iterations of eq, reg, reg2...
eq: 2 secs ( 1.06 usr 0.00 sys = 1.06 cpu)
reg: 1 secs ( 1.94 usr 0.00 sys = 1.94 cpu)
reg2: 3 secs ( 1.18 usr 0.00 sys = 1.18 cpu)
Pentium Pro 200.
Cili porovnani pomoci eq je rychlejsi, ale zase ne o tolik, takze
pokud to porovnani udelate jednou na zacatku skriptu, tak je asi
nelepsi pouzit ten posledni pripad, protoze je to nejcitelnejsi.
Pro uplnost posilam i vysledky pro situaci, kdy $a = "lama":
Benchmark: timing 15000 iterations of eq, reg, reg2...
eq: 3 secs ( 0.93 usr -0.01 sys = 0.92 cpu)
reg: 4 secs ( 1.49 usr 0.01 sys = 1.50 cpu)
reg2: 4 secs ( 1.77 usr 0.01 sys = 1.78 cpu)
Benchmark: timing 150000 iterations of eq, reg, reg2...
eq: 1 secs ( 2.17 usr 0.00 sys = 2.17 cpu)
reg: 1 secs ( 2.37 usr 0.00 sys = 2.37 cpu)
reg2: 2 secs ( 2.64 usr 0.00 sys = 2.64 cpu)
Benchmark: timing 150000 iterations of eq, reg, reg2...
eq: 2 secs ( 1.32 usr 0.00 sys = 1.32 cpu)
reg: 3 secs ( 1.71 usr 0.00 sys = 1.71 cpu)
reg2: 3 secs ( 2.14 usr 0.00 sys = 2.14 cpu)
cili je videt, zda zalezi na tom, zda ocekavate kladny nebo zaporny
vysledek.
Doufam, ze to pomuze,
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
I can take or leave it if I please
------------------------------------------------------------------------
Další informace o konferenci Perl