Sven Rautenberg: Problem: Script braucht zu viel Arbeitsspeicher. Bräuchte Tips.

Beitrag lesen

Moin!

Ich habe ein Script geschrieben, das augenscheinlich zu viel Speicherplatz verbraucht.

Hast du mal überschlagsmäßig nachgedacht, wieviel Speicher deine Objekte im Speicher belegen?

Nur so als Beispiel nehmen wir mal ein Integer-Array:
Jeder Wert belegt 4 Byte.

Ein Array 1..100 belegt also 400 Byte. Billig.
Ein Array 1..100,1..100 belegt schon 100x100x4 Byte, also 40000 Byte.
Ein Array 1..100,1..100,1..100 belegt 4.000.000 Byte, ungefähr 4 Megabyte.

Du hast eine Struktur gewählt, die:

  • drei Dimensionen in der ersten Ebene hat:

$root->obj['xyz']['abc']['bnm'] = new Klasse_1();

  • drei Dimensionen in der zweiten Ebene hat:

$root->obj['xyz']['abc'][1]->obj['sdf']['yxc']['xcv'] = new Klasse_4();

  • und drei Dimensionen un der dritten Ebene hat:

$root->obj['xyz']['abc'][1]->obj['wer']['xcv']['qwe']->obj['rtz']['tzu']['zui'] = new Klasse_6();

Wenn du ein symmetrisches Array aufbauen würdest, nur mit Integer-Zahlen zu je 4 Byte, dann würde die erste Ebene aus einer Million Elementen bestehen. Jedes hätte wiederum eine Million Unterelemente in der zweiten Ebene, und das wiederum eine Million Unterelemente in der dritten Ebene. Mal 4 Byte (ein Zeiger hat z.B. diese Größe)!

1 Mio x 1 Mio x 1 Mio x 4 Byte sind nach Adam Riese die schlappe Größe von
4.000.000.000.000.000.000 Byte. Oder auch 4 Trillionen Byte. Oder (ungefähr gerundet) 4 Millionen Terabyte!

Natürlich nur, wenn du wirklich für jeden Index echt einhundert Werte hast.

Wie gesagt: Eine Überschlagsrechnung. Macht aber deutlich, daß du durch dein Verschachteln bis in die dritte Ebene von jeweils dreidimensionalen Arrays oder Hashes ziemlich schnell in Probleme geraten wirst, weil zumindest die Verwaltungsinformationen für die Hashes sich mit x^9 explosionsartig im Speicher breitmachen.

Mir scheint, du solltest dein Konzept grundlegend ändern. :)

Dazu solltest du vielleicht erstmal erklären, wozu du diese Unmenge an Daten überhaupt benötigst, sprich: Was willst du überhaupt machen?

- Sven Rautenberg