Thread ist das hier sinnvoll?: benchmarking-vergleich
(3 answers)
Opened by Gast at 2006-05-21 11:37
Hallo,
hier mal das Skript etwas umgebaut mit (einfacher) Benutzung des Benchmark Moduls: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/usr/bin/perl use strict; use warnings; use Benchmark; # test.html beinhaltet diese Beitragsseite lokal gespeichert open FH, "test.html" or die "test.html: $!"; my $string = do { local $/; <FH> }; close FH; timethese (1_000_000, { func1 => \&func1, func2 => \&func2, }); sub func1 { my $start = index($string, "<title>"); my $ende = index($string, "</title>"); my $title = substr($string, $start+7, $ende - $start - 7); } sub func2 { my $title = ũ if ( $string =~ m{<title>(.*)</title>}i ) ; } Ergebnis: Quote Wie zu erkennen ist, ist die erste Variante die schnellere... Zum print: Die print-Ausgabe verlangsamt das Ganze, weil nun die Ausgabe über die Console bewerkstelligt werden muss, und das ist ein lahmer Prozess, der seine Zeit beansprucht... Wenn es performant sein soll, also die Ausgabe ganz vermeiden, oder die Sachen sammeln und danach ausgeben; dann braucht man aber Arbeitsspeicher, um das zu sammeln. Das Ergebnis, wenn ich mir den Title auf STDERR ausgeben lasse und STDOUT in eine Datei umleite: Quote Das zeigt zwar, dass die index/substr Methode schneller als Regex arbeitet, aber die Ausgabe bremst enorm... Der zweite Test wurde mit folgendem Code durchgeführt: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/perl use strict; use warnings; use Benchmark; open FH, "test.html" or die "test.html: $!"; my $string = do { local $/; <FH> }; close FH; timethese (1_000_000, { func1 => \&func1, func2 => \&func2, }); sub func1 { my $start = index($string, "<title>"); my $ende = index($string, "</title>"); print STDERR substr($string, $start+7, $ende - $start - 7); } sub func2 { print STDERR Å© if ( $string =~ m{<title>(.*)</title>} ) ; } und mit folgendem Aufruf gestartet: Quote [edit] $string-Deklaration modifiziert (von use vars qw// auf my...); kleine Textkorrekturen[/edit]\n\n <!--EDIT|Linuxer|1148207312--> meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |