Thread Schleifengeschwindigkeit (20 answers)
Opened by RPerl at 2009-05-30 17:02

pq
 2009-05-30 23:33
#122120 #122120
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
kein wunder.
du hast gefragt, ob du die schleife schneller kriegst. sag doch gleich, dass du den ganzen code schneller kriegen willst. das ist die kunst des profilens und benchmarkens.
ich zeig dir mal was:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
perl -we'
($m, $i) = @ARGV;
use Benchmark;
timethese($i, {
block => sub { $x = 0; while (++$x < $m) { $x++ } },
noblock => sub { $x = 0; ++$x while ++$x < $m }
});' 100000 1000
Benchmark: timing 1000 iterations of block, noblock...
block: 9 wallclock secs ( 9.10 usr + 0.00 sys = 9.10 CPU) @ 109.89/s (n=1000)
noblock: 8 wallclock secs ( 8.07 usr + 0.00 sys = 8.07 CPU) @ 123.92/s (n=1000)

und siehe da, die variante ohne block ist tatsächlich etwas schneller. war es das, was du wolltest?
wenn der inhalt des blocks aber soviel mehr zeit kostet, ist das bedeutungslos. aber du hast danach gefragt, und ich habe dir geantwortet.
(im übrigen kann man auch meinst ganz gut mit B::Deparse überprüfen, ob der code kompiliert zum gleichen code wird, was natürlich im negativen falle immer noch nicht heisst, dass es nicht zu den gleichen opcodes führt. in diesem falle tut es das aber anscheinend. die opcodes kann man sich auch anzeigen lassen, aber das ist dann wiederum nicht mein spezialgebiet)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Schleifengeschwindigkeit