frak: .= vs []

Hallo,

Warum verbraucht $array[]=$line in einer schleife weniger bytes als $var.=$line?

MfG frak

  1. Moin!

    Warum verbraucht $array[]=$line in einer schleife weniger bytes als $var.=$line?

    Warum sollte es? Wer behauptet das? Warum begründet er es nicht?

    - Sven Rautenberg

    --
    Die SelfHTML-Developer sagen Dankeschön für aktuell 19031,30 Euro Spendengelder!
  2. Hello,

    Warum verbraucht $array[]=$line in einer schleife weniger bytes als $var.=$line?

    Hast Du Beweise dafür?
    Wie hast Du das getestet? Wieviele Durchläufe?

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  3. Hallo,

    Warum verbraucht $array[]=$line in einer schleife weniger bytes als $var.=$line?

    Selbst wenn das stimmen sollte, rate ich dir dazu das zu benutzen, was dir im Kontext des Programms logisch am sinnvollsten erscheint. Es gilt nämlich immernoch:

    "In 97 Prozent der Fälle können sie kleine Effizienzerwägungen vergessen. Verfrühte Optimierungsanstrengungen sind die Wurzel allen Übels." [Donald E. Knuth, 1974]

    Gruß, Jan

  4. Hallo,

    Warum verbraucht $array[]=$line in einer schleife weniger bytes als $var.=$line?

    Probierts doch mal aus:

    <?php
    $file = file("bild.gif");
    foreach($file as $line)
    {
     $var[]=$line;
            //$var.=$line
    }
    echo memory_get_usage();
    ?>

    mit einem bild komme ich auf 60904 bei .= und mit [] auf 60080!
    natürlich wirkt sich das bei größeren files extremer aus.

    MfG frak

    1. Hello,

      <?php
       echo memory_get_usage();
       $file = file("bild.gif");
       foreach($file as $line)
       {
        $var[]=$line;
               //$var.=$line
       }
       echo memory_get_usage();
       ?>

      Ehrlich vergleichen solltest Du schon.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      1. Hi,

        <?php
         echo memory_get_usage();
         $file = file("bild.gif");
         foreach($file as $line)
         {
          $var[]=$line;
          //$var.=$line
         }
         echo memory_get_usage();
         ?>

        Ehrlich vergleichen solltest Du schon.

        ?? ich hab den vergleich sogar gepostet! was vor der schleife rauskommt ist uninteressant! ich hab das script einmal mit $var[]=$line und einmal mit $var.=$line ausgeführt und eben das festgestellt wodran ich schon die ganze zeit festhalte.
        ich mach das doch nicht aus jux und dollerei.
        bei einem etwas größerem script kommt es nämlich mit .= zu fatal maximum error und mit [] nicht.

        MfG frak

        1. Hello,

          Hi,

          <?php
           echo memory_get_usage();
           $file = file("bild.gif");
           foreach($file as $line)
           {
            $var[]=$line;
            //$var.=$line
           }
           echo memory_get_usage();
           ?>

          Ehrlich vergleichen solltest Du schon.
          ?? ich hab den vergleich sogar gepostet! was vor der schleife rauskommt ist uninteressant!

          Nein! Es ist nicht uninteressant, wenn man nachweisen will, dass da etwas nicht stimmt. Der Fehler könnte ja auch woanders im Script stecken.
          Ich kann das leider nicht nachvollziehen, weil beide zur Verfügung stehenden PHP-Versionen älter als 4.3.3 sind.

          ich hab das script einmal mit $var[]=$line und einmal mit $var.=$line ausgeführt und eben das festgestellt wodran ich schon die ganze zeit festhalte.
          ich mach das doch nicht aus jux und dollerei.

          Nun halt mal die Füße still.
          Ich auch nicht ;-)

          Wenn die Differenz etwa in der Größenordnung der Stringlänge selber liegt (zuzüglich ein paar Byte für den Eintrag in der Variablentabelle), dann konnte es sich tatsächlich um eine vergessene Speicherrückgabe handeln.

          Insofern sollte man das tatsächlich nicht auf die leichte Schulter nehmen, sondern sowohl für qualitative als auch quantitaive Aussagen sorgen.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. Hi!

      <?php
      $file = file("bild.gif");
      foreach($file as $line)
      {
      $var[]=$line;
              //$var.=$line
      }
      echo memory_get_usage();
      ?>

      Also das ist relativ sinnfrei was Du da mschst ;-)

      Das ist ganau dasselbe als würdest Du sowas machen:

      $var = file("bild.gif");

      ;-)

      Du vregleiuchst außerdem Äpfel mit Birnen. Das eine Erzeigt einen Array, das andere erzeugt einen String? Was brauchst Du? Das nimm auch.

      Wenn Du alles in einen String ahben willst, solltest Du eien Datei direkt in einen String lesen, z.B. mit fread oder fgets. Oder noch besser mit file_get_contents.

      mit einem bild komme ich auf 60904 bei .= und mit [] auf 60080!
      natürlich wirkt sich das bei größeren files extremer aus.

      Also extrem finde ich das nicht gerade. Außerdem, was glaubst Du wieviele Zeilenumbrüche eien .guf-Datei hat? Vielleicht keinen einzigen, in dem Fall machen beide varianten mit [] und .= im Prinzip dasselbe.

      Es kommt drauf an was Du machen willst, wenn Du extrem große Files bearbeiten/analysieren willst, solltest Du nicht die gesamte File einlesen, sondern häppchenweise einlesen, bei Grafikdateien natürlich Schwachsinn. Aber eine Grafikdatei in einen Array zu laden ist mindestens genauso schwachsinnig ;-)

      Es kommt drauf an was Du mit $var machen willst. Wenn Du es erst in einen Array lädst, weil Du glaubst das ist besser, und danach über implode wieder in einen string ist das doppelte Arbeit.

      Du solltest lieber ein fertiges Script optimieren, als solche Dinge ohne jeden Zusammenhang.

      Grüße
      Andreas

      1. Hi!

        Oh Gott waren da viel Fehler drin, sorry, hier mal eine verbesserte Version ;-)

        <?php
        $file = file("bild.gif");
        foreach($file as $line)
        {
        $var[]=$line;
                //$var.=$line
        }
        echo memory_get_usage();
        ?>

        Also das ist relativ sinnfrei was Du da machst ;-)

        Das ist genau dasselbe als würdest Du sowas machen:

        $var = file("bild.gif");

        ;-)

        Du vergleichst außerdem Äpfel mit Birnen. Das eine erzeugt einen Array, das andere erzeugt einen String. Was brauchst Du? Das nimm auch.

        Wenn Du alles in einen String haben willst, solltest Du eine Datei direkt in einen String lesen, z.B. mit fread() oder fgets(), oder noch besser mit file_get_contents().

        mit einem bild komme ich auf 60904 bei .= und mit [] auf 60080!
        natürlich wirkt sich das bei größeren files extremer aus.

        Also extrem finde ich das nicht gerade. Außerdem, was glaubst Du wieviele Zeilenumbrüche eine .gif-Datei hat? Womöglich keinen einzigen, in dem Fall machen beide Varianten mit [] und .= im Prinzip dasselbe.

        Es kommt drauf an was Du machen willst, wenn Du extrem große Dateien bearbeiten/analysieren willst, solltest Du nicht die gesamte Datei einlesen, sondern häppchenweise einlesen, bei Grafikdateien natürlich Schwachsinn. Aber eine Grafikdatei in einen Array zu laden ist mindestens genauso schwachsinnig ;-)

        Es kommt drauf an was Du mit $var machen willst. Wenn Du es erst in einen Array lädst, weil Du glaubst das ist besser, und danach über implode wieder in einen String überführst, ist das doppelte Arbeit.

        Du solltest lieber ein fertiges Script optimieren, als solche Dinge ohne jeden Zusammenhang.

        Grüße
        Andreas