Hello,
Nein. Das ERZEUGEN des Arrays verbraucht bzw. benötigt mehr Speicher, als wenn man das SQL-Ergebnis in seinem Pufferspeicher beläßt. Mindestens punktuell beim Erzeugen des Arrays, weil das Kopieren den Bedarf grob verdoppelt.
Das könnte dann Leute, die generell mittels "Select * from table
" _alle_ Spalten und _alle_ Zeilen einer Tabelle einlesen (warum auch immer?), dann schon an den rand der in vielen Installationen üblichen 8MB Speicher bringen...
Aber darum schrieb ich ja schon: Das Abfrageergebnis bereits in der Datenbank so kompakt wie möglich halten. Dazu gehört auch, dass man z.B. für eine Listendarstellung (Jeder Satz eine Zeile) abgefragte (große) Textfelder nicht vollständig aus der DB holt, wenn man sie später sowieso nur bis zum 30ten Zeichen anzeigen lassen will.
Angenommen, so eine Liste schafft in der Breite 120 Zeichen (damit man nicht horizontal scrollen muss) und hat 20 Spalten, dann benötigt man für jedes Zeilenarray ca. 1.440 + 160 = 1.600 Bytes
Das macht dann bei 50 Zeilen auf dem Schirm ca. 3600 + 80.000 = 83.600 Bytes
Alleine die interne Speicherverwaltung für die Arrays kostet schon 75.600 Bytes.
Hinzu kommt noch weiterer Speicherbedarf für die Verwaltung, den ich hier nicht berücksichtigt habe.
Das sind nur Ergebnisse aus einem kurzen Versuch.
Ein leeres Arrayelement brauchte meistens 72 Bytes zusätzlich, Datenspeicher wurden immer 4-Byte-weise allokiert.
Wenn man wissen will, was da wirklich passiert, muss man reingucken in den Source-Code für die Arrays.
Resultat des Tests ist aber, dass die "Arrays" in PHP bezüglich des Speicherverbrauches sehr teuer sind. Der meiste Speicher (gut 90%) ging hier für die Verwaltung drauf. Die Datenfelder waren zwischen 28 und 40 Bytes lang.
Wenn man also "nur" 8MB zur Verfügung hat, muss man damit bei größeren Scripten schon sorgsam umgehen. Das script selber benötigt ja auch noch Speicher. Ob die Instanz für den Parser auch von den 8MB abgeht, die mit memory_limit eingestellt werden können, weiß ich (noch) nicht.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
