Ankündigung

Einklappen
Keine Ankündigung bisher.

Referenzen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Referenzen?

    Moinsen,

    ich habe gerade mal wieder ein wenig das Web durchforstet um meine Scripte zu optimieren. Ich bin dabei auf Referenzen gestoßen.

    Wenn ich z. B. ein Array aus der Datenbank hole, diese aber in veränderter Form benötige, bin ich sonst immer das Array durchgegangen (foreach) und habe ein neues Array mit manipulierten Werten geschrieben.

    Da ich das alte Array nicht mehr benötige, wäre dies ein Fall, die foreach als call by reference aufzurufen, oder?

    Gibt es noch mehr solche Situationen wo man sich, durch die Nutzung von Referenzen, Speicher einspart?

    Benny

  • #2
    Das bißchen Speicher macht den Kohl nicht fett.

    Ich brauch Referenzen nur bei Funktionen,
    damit der übergebene Parameter verändert
    zurückgegeben wird.

    Kommentar


    • #3
      Stimmt, bei Funktionen habe ich z.B. auch immer 1 Variable, und dann eine 2te Variable wo die Funktion drüberlieg. Die Alte Variable war somit auch noch im Speicher, wird aber nicht mehr gebraucht. Man kann diese dann zwar mit unset löschen, aber es geht ja auch einfacher, und man kann nicht vergessen ungenutze Variablen zu löschen.

      Edit: Ich habe mal ein test durchgeführt.

      Foreach ohne Referenz hat ca. 13kb mehr Speicherverbrauch. Das Array war mit 100 Werten gefüllt. Und wenn man 10 foreach Schleifen hat, finde ich es durchaus sinnvoll.

      Kommentar


      • #4
        na ja gut - wenn Dein Server nur ein halbes MB RAM hat,
        aber sonst ...
        auch immer 1 Variable, und dann eine 2te Variable wo die Funktion drüberlieg.
        versteh ich nicht ...

        sieht bei mir so aus:

        function(&$var){

        return &$var;
        }

        schau mal hier:
        http://www.usegroup.de/software/phpt...eferenzen.html

        Kommentar


        • #5
          Japps, bei mir würde es so aussehen:

          function($var)
          {
          return $var;
          }

          $var1 = bla;
          $var1 = function($var1);

          oder halt :

          $var1 = bla;
          $var2 = function($var1);

          Kommentar


          • #6
            das sind aber immer Kopien.
            Man kann vereinfacht annehmen, dass "=" eine Kopie anlegt, und "= &" eine Referenz.
            Dieses Beispiel aus dem Tut verdeutlicht
            es am besten:
            PHP-Code:
            $val="Bernd Buchhalter";
            $ref=&$val;
            $ref="Ralf Differenz";
            echo 
            "Bernd Buchhalter heißt jetzt $val"
            oder das hier:
            PHP-Code:
            function dreizurueck(&$refEins, &$refZwei, &$refDrei)
            {
              
            $refEins=1;
              
            $refZwei=2;
              
            $refDrei=3;
            }

            dreizurueck($one$two$three);
            echo 
            "$one $two $three"

            Kommentar


            • #7
              Ja, das weiss ich bereits. Deswegen fragte ich nach Situationen wo es sinnvoll ist, auf eine Kopie zu verzichten, und stattdessen eine Referenz zu nutzen.

              Also im moment seh ich den Vorteil bei:

              Functionen
              foreach() um manipuitiertes Array zu 'erzeugen'

              Benny

              Kommentar


              • #8
                Zitat von stayInside Beitrag anzeigen
                Foreach ohne Referenz hat ca. 13kb mehr Speicherverbrauch.
                Wie kommst du da drauf? Wie haste das getestet?

                Kommentar


                • #9
                  Ich hab mir vor und nach der foreach den Speicherverbrauch auslesen lassen. Einmal halt mit und einmal ohne Referenz.

                  Kommentar


                  • #10
                    O_o glaub ich kaum dass du da genau den Speicherverbrauch ausmachen kannst. Ansich müssen die Elemente halt einmal kopiert werden. Kommt also wohl auf die Größe vom Array drauf an.

                    Kommentar


                    • #11
                      Sich bei sowas um Performance Gedanken zu machen ist wie beim Autofahren die ganzen "Atomkraft nein danke"-Aufkleber abzukratzen um windschnittiger zu sein.

                      PHP: Beschreibung der php.ini-Direktiven des Sprachkerns - Manual
                      Hier - bitte gleich abschalten in deiner php.ini

                      Kommentar

                      Lädt...
                      X