Alex: Laufzeit von Kode messen (PERL)

Hallo,

ich möchte gerne die Zeit einer Funktion ermitteln. Ich schreibe dann so:

#8<---------------8<--------PERL-------8<---------------

sub test1;

my $tm = 0;
my $timer_string = 0;
my $out = 0;

$tm = timethese(10000,{
'test1' => 'test1()',
});

sub test1{
$out="sssadsd\n" ;
$out.="sssadsd\n" ;
$out.="sssadsd\n" ;
}

$timer_string = timestr($tm);

#8<---------------8<--------PERL-------8<---------------
...
#8<---------------8<--------HTML-------8<---------------

<html>
<body>

$timer_string

</body>
</html>

#8<---------------8<--------HTML-------8<---------------

Und der Webserver meldet sich damit:

Software error:

Not an ARRAY reference at /usr/lib/perl5/5.6.1/Benchmark.pm line 423.

Was mache ich falsch?

Danke!

  1. Hi,

    Ich habe keine Ahnung von Perl, aber warum fragst du nicht einfach am Anfang des Scripts die Zeit ab und subtrahierst sie am Ende vom der Endzeitpunkt des Scripts?

    MfG Hopsel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    1. ... am Ende vom der Endzeitpunkt des Scripts?

      Problem ist, dass ich im ganzen Skript die Zeit an bestimmten Stellen messen will.

      1. ... am Ende vom der Endzeitpunkt des Scripts?

        Problem ist, dass ich im ganzen Skript die Zeit an bestimmten Stellen messen will.

        Was ändert sich dann Deiner Meinung nach an der vorgeschlagenen Vorgehensweise?

        Gruß
        Reiner

        1. Hi,

          ... am Ende vom Endzeitpunkt des Scripts?
          Problem ist, dass ich im ganzen Skript die Zeit an bestimmten Stellen messen will.
          Was ändert sich dann Deiner Meinung nach an der vorgeschlagenen Vorgehensweise?

          Müsstest du mir jetzt auch erklären.

          MfG Hopsel

          --
          "It's amazing I won. I was running against peace, prosperity, and incumbency."
          George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
          1. Hi,

            ... am Ende vom Endzeitpunkt des Scripts?
            Problem ist, dass ich im ganzen Skript die Zeit an bestimmten Stellen messen will.
            Was ändert sich dann Deiner Meinung nach an der vorgeschlagenen Vorgehensweise?

            Na, mit Deinem Vorschlag (Substraktion zweier Zahlen, Lernstoff 3. Klasse?) sollte man auch Zwischenergebnisse hinbekommen, oder? ;-)

            Viele Grüße,
            Reiner

            1. Na, mit Deinem Vorschlag (Substraktion zweier Zahlen, Lernstoff 3. Klasse?) sollte man auch Zwischenergebnisse hinbekommen, oder? ;-)

              Nein bekommt man nicht. Wenn man keine Ahnung hat einfach mal ....

              Es geht nicht um die Laufzeit eines Skriptes, sondern um die Laufzeit einer bestimmten Funktion. Das von Alex benutzte Modul dient dazu um die Laufzeit von verschiedenen Funktionen zu vergleichen.

              Struppi.

              1. Es geht nicht um die Laufzeit eines Skriptes, sondern um die Laufzeit einer bestimmten Funktion. Das von Alex benutzte Modul dient dazu um die Laufzeit von verschiedenen Funktionen zu vergleichen.

                Genau. Also, um die Sache besser zu verstehen, erkläre ich mein Problem  etwas detaillierter.

                Ich habe einen Kode geschrieben, der mir die Daten auf den Server uploaden ermöglicht. Nun merke ich, dass aus irgendwelchen Gründen mein  Upload im Netzwerk mit 100Bit/s (Fast Internet) zu langsam ist... :-/

                Die Datei ist z.B. 1,5 MBytes groß und es dauert mindestens 20 Sekunden bis die upgeloadet ist.

                Deshlab möchte ich die Zeit an bestimmten Stellen messen.

                1. Ich habe einen Kode geschrieben, der mir die Daten auf den Server uploaden ermöglicht. Nun merke ich, dass aus irgendwelchen Gründen mein  Upload im Netzwerk mit 100Bit/s (Fast Internet) zu langsam ist... :-/

                  Die Datei ist z.B. 1,5 MBytes groß und es dauert mindestens 20 Sekunden bis die upgeloadet ist.

                  Deshlab möchte ich die Zeit an bestimmten Stellen messen.

                  Ja verstanden, aber die Technik ist doch dennoch wie vorgeschlagen anwendbar. Vor der Funktion (dem Upload) merkst Du Dir die aktuelle Zeit, wenn Du fertig bist bildest Du die Zeitdifferenz.
                  Wenn Dir die Auflösung (time) in Sekunden nicht reichen sollte, würde ich Time::HiRes empfehlen.

                  Viele Grüße,
                  Reiner

    2. Ich habe keine Ahnung von Perl, aber warum fragst du nicht einfach am Anfang des Scripts die Zeit ab und subtrahierst sie am Ende vom der Endzeitpunkt des Scripts?

      Benchmark ist ein Perl Modul, mit dem du die Geschwindigkeit von mehreren Funktionen miteinander vergleichen kannst, also nicht die Laufzeit des Skriptes, sondern du kannst damit die Effizienz von verschiedenen Methoden vergleichen.

      Struppi.

  2. Hallo,

    ich möchte gerne die Zeit einer Funktion ermitteln. Ich schreibe dann so:

    [...]

    Was mache ich falsch?

    Danke!

    Hi,

    da du das Module Benchmark verwendest sollte dir "perldoc Benchmark" alle nötigen Informationen liefern. Dort sind auch sehr viele Beispiele angegeben.
    Alternativ sollte dir [url:http://www.google.de/search?hl=de&q=Perl+Benchmark&btnG=Suche&meta=lr%3Dlang_de] helfen.

    Viel Spass!

  3. use Mosche;

    Deine Benutzung von timestr() ist falsch. Siehe perldoc Benchmark

    use Tschoe qw(Matti);

    --
    Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    Webapplikationen in C++ entwickeln
    1. use Mosche;

      Ich habe im google nix davon gefunden...

      Deine Benutzung von timestr() ist falsch. Siehe perldoc Benchmark

      Und was ist da falsch?

      use Tschoe qw(Matti);

      Ich habe im google nix davon gefunden...

      1. Deine Benutzung von timestr() ist falsch. Siehe perldoc Benchmark

        Und was ist da falsch?

        Du benutzt es nicht so, wie es in der Dokumentation beschrieben wird.

        Struppi.

        1. Du benutzt es nicht so, wie es in der Dokumentation beschrieben wird.

          Ok. Wie machen es die News-Group-Leser? ;-)

          1. Du benutzt es nicht so, wie es in der Dokumentation beschrieben wird.

            Ok. Wie machen es die News-Group-Leser? ;-)

            Die Doku lesen: http://search.cpan.org/dist/perl/lib/Benchmark.pm

            timediff ( T1, T2 )

            Returns the difference between two Benchmark times as a Benchmark object suitable for passing to timestr().

            Struppi.

            1. Die Doku lesen: http://search.cpan.org/dist/perl/lib/Benchmark.pm

              Danke für den Tipp. :-( Ich habe 2 Bücher von mir von O'Reilly und bereits die Beispiel ganz dumm abgetippt... und es kommt immer wieder die gleiche Fehler-Meldung.

            2. Hallo ;-)

              Die Doku lesen: http://search.cpan.org/dist/perl/lib/Benchmark.pm

              Ich nehme meine Wörter zurück! ;-)

              use Benchmark;
                  $t0 = new Benchmark;
                  # ... your code here ...
                  $t1 = new Benchmark;
                  $td = timediff($t1, $t0);
                  print "the code took:",timestr($td),"\n";

              Danke, es klappt!