perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




11.02.2012 / 08:13

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragGeschwindigkeitsunterschied 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: Geschwindigkeitsunterschied bei ' und "
Seitenanfang
Also besser den ' wenn man den " nicht unbedingt braucht?

Datum: 19.03.2007-11:29

Beitragre: 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

Beitragre: 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

-






-
-