Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
| Hallo! Es gibt ja 2 Arten mit Anfrühungsstrichen einen String zu begrenzen. Einmal das einfache ' das nicht interpoliert wird und die doppelte Variante " in der Variablen interpoliert werden. Meine Frage ist, ob es von der Geschwindigkeit her etwas ausmacht, wenn ich statt dem doppelten das einfache Anführungszeichen verwende. mfg, Perler
Datum: 16.03.2007-12:49

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
Benchmark: timing 10000000 iterations of doppelt, einfach... doppelt: 2 wallclock secs ( 1.45 usr + 0.01 sys = 1.46 CPU) @ 6849315.07/s (n=10000000) einfach: 1 wallclock secs ( 1.87 usr + 0.00 sys = 1.87 CPU) @ 5347593.58/s (n=10000000)Script: #!/usr/bin/perl -w use strict; use Benchmark qw(:all); timethese( 1e7, { einfach => sub {my $a = 'foobar'}, doppelt => sub {my $a = "foobar"}, } );
danach ist doppelt schneller...
Datum: 16.03.2007-13:06

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
das hat mich so gewundert, dass ich mal geschaut habe, wie das bei mir aussieht. und es stimmt. allerdings bei diesem benchmark dann nicht mehr: f:\>perl #!/usr/bin/perl -w use strict; use Benchmark qw(:all);timethese( 1e7, { einfach => sub {my $a = 'foo\nb\rar'}, doppelt => sub {my $a = "foo\nb\rar"}, } ); ^D Benchmark: timing 10000000 iterations of doppelt, einfach... doppelt: 7 wallclock secs ( 5.45 usr + 0.01 sys = 5.46 CPU) @ 1832508.70/s (n=10000000) einfach: 6 wallclock secs ( 5.37 usr + 0.00 sys = 5.37 CPU) @ 1862891.21/s (n=10000000)
Datum: 17.03.2007-15:13

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
| Hmmm, dabei bekomme ich Benchmark: timing 10000000 iterations of doppelt, einfach... doppelt: 3 wallclock secs ( 1.83 usr + 0.00 sys = 1.83 CPU) @ 5464480.87/s (n=10000000) einfach: 2 wallclock secs ( 2.86 usr + 0.02 sys = 2.88 CPU) @ 3472222.22/s (n=10000000) also "doppelt" immer noch schneller als 'einfach' perl -v sagt mir v5.8.8 built for i486-linux-gnu-thread-multi /proc/cpuinfo sagt über den Prozessor: Intel(R) Pentium(R) M processor 1.70GHz es scheint also CPU- und versionsabhängige Unterschiede zu geben. Alter Elektronikerspruch: "Wer misst, misst Mist!"
Datum: 18.03.2007-22:30

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
| Ein Geschwindigkeitsunterschied sollte sich nur zur Kompilierzeit auswirken, also pro Script nur ein einziges Mal. In Deinem Benchmark wird der Code einmal kompiliert und 1e7 mal ausgefuehrt. Daher ist das Ergebnis auch unterhalb der Messgenauigkeit. Versuche, den Benchmark mehrere Male laufen zu lassen, und Du wirst wahrscheinlich unterschiedliche Ergebnisse erhalten.
Datum: 19.03.2007-02:09

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
for (0..2) { Benchmark::cmpthese(-1, { einfach => sub { eval {my $a = 'foobar';} }, doppelt => sub { eval {my $a = "foobar";} }, }); } Rate doppelt einfach doppelt 1587376/s -- -1% einfach 1607775/s 1% -- Rate doppelt einfach doppelt 1542023/s -- -5% einfach 1621783/s 5% -- Rate doppelt einfach doppelt 1535999/s -- -12% einfach 1741742/s 13% -- Ist doch eigentlich wurscht, ob nun " oder ' ! Sinn macht es dort, wo es gebraucht wird.
Datum: 19.03.2007-10:43

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
| Also besser den ' wenn man den " nicht unbedingt braucht?
Datum: 19.03.2007-11:29

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
| Ah je... du stellst Fragen! :-) Ich benutze das einfache Hochkomma, wenn es mir komfortable genug erscheint. print 'Wenn ich zum Beispiel nicht möchte, dass dieses @array, der Angeloperator $_ oder auch die $Variable interpoliert wird sondern nur das Newline \n am Ende', "\n";print "Ansonsten müsste ich überall ein Slash vorsetzen... \@array, \$_, \$Variable, \\n!\n";
Datum: 19.03.2007-12:04

|
re: Geschwindigkeitsunterschied bei ' und "
|
Seitenanfang |
| Danke an betterworld - thx ;-) - für seinen Hinweis... Der Benchmark ist so natürlich richtig: use Benchmark;for (0..2) { Benchmark::cmpthese(-1, { einfach => sub { eval 'my $a = \'foobar\';' }, doppelt => sub { eval 'my $a = "foobar";' }, }); } Rate doppelt einfach doppelt 57962/s -- -3% einfach 59650/s 3% -- Rate doppelt einfach doppelt 56366/s -- -5% einfach 59076/s 5% -- Rate doppelt einfach doppelt 57421/s -- -2% einfach 58514/s 2% --
Datum: 19.03.2007-14:13

|