Arrays und Speicher

4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 6.0


Ein Array wird im Gegensatz zu Daten, die Sie in Tabellen und Datensätzen auf der Festplatte speichern, immer vollständig im Speicher gehalten.

Geben Sie zum Beispiel alle Postleitzahlen in einer Tabelle [PLZ] ein, enthält sie ca. 10.000 Datensätze. Die Tabelle enthält natürlich weitere Datenfelder, wie Landeskennzahl und Stadt. Wählen Sie nun das Postleitzahlengebiet 8, erstellt die 4D Datenbank-Engine die entsprechende Datensatzauswahl in der Tabelle [PLZ], und lädt die Datensätze nur bei Bedarf, also z.B. zum Anzeigen auf dem Bildschirm oder zum Drucken. Mit anderen Worten, Sie arbeiten mit einer geordneten Reihe von Werten vom selben Typ, die die Engine teilweise von der Festplatte in den Speicher lädt.

Dieses Vorgehen ist für Arrays undenkbar. Das hat folgende Gründe:

Zum Verwalten der drei Informationen Landeskennzahl, Postleitzahl und Stadt müssten Sie drei umfangreiche Arrays im Speicher halten.

Da ein Array immer vollständig im Speicher gehalten wird, müssten Sie alle Informationen dieser Arrays während der ganzen Arbeitssitzung im Speicher halten, auch wenn Sie die Daten nicht ständig benötigen.

Diese Arrays müssten bei jedem Starten bzw. Beenden der Datenbank komplett geladen und dann auf der Festplatte gesichert werden, selbst wenn die Daten während der ganzen Arbeitssitzung weder benutzt noch verändert wurden.

Fazit: In Arrays sollten überschaubare Datenmengen für eine kurze Zeitspanne gehalten werden. Da Arrays im Hauptspeicher gehalten werden, sind Array-Operationen sehr schnell. Sie können im Handumdrehen Array-Elemente kopieren, sortieren, suchen... .

Unter bestimmten Umständen müssen Sie jedoch Arrays mit hunderten oder tausenden von Elementen einsetzen. Nachfolgende Tabelle zeigt die Formel zum Berechnen der Speicherbelegung für jeden Array-Typ:

Array-TypSpeicherbelegung in Bytes
Boolean(31+Anzahl der Elemente)/8
Datum(1+Anzahl der Elemente) * 6
Alphanumerisch(1+Anzahl der Elemente) * Definierte Länge eines Elements
(+1 für ungerade, +2 für gerade Länge)
Ganzzahl(1+Anzahl der Elemente) * 2
Lange Ganzzahl(1+Anzahl der Elemente) * 4
Bild(1+Anzahl der Elemente) * 4 + Summe der Größen jedes Bilds im Array
Zeiger(1+Anzahl der Elemente) * 16
Zahl(1+Anzahl der Elemente) * 8
Text(1+Anzahl der Elemente) * 6 + Summe der Länge jedes Texts im Array
Zweidimemsional(1+Anzahl der Elemente) * 12 + Summe der Größe jedes Array im Array

Hinweis: Das ausgewählte Element, die Anzahl der Elemente und das Array selbst benötigen ein paar zusätzliche Bytes.

Beim Arbeiten mit umfangreichen Arrays sollten Sie prüfen, ob der Speicher ausreicht. Setzen Sie dazu die Array-Erstellung an den Anfang und fragen Sie Fehler mit einer Projektmethode ON ERR CALL ab. Beispiel:

      `Über Nacht soll eine Operation laufen, bei der umfangreiche Arrays erstellt werden
       müssen. Anstatt das Auftreten von Fehlern mitten in der Nacht zu riskieren, lege das
       Erstellen von Arrays an den Beginn der Operation und prüfe die Fehler zu diesem
       Zeitpunkt:
   gError:=0 ` Nimm an, es gibt keinen Fehler
   ON ERR CALL ("ERROR HANDLING") ` Installiere eine Methode zur Fehlersuche
   ARRAY STRING (63;asThisArray;50000) ` Ungefähr 3125K
   ARRAY REAL (arThisAnotherArray;50000) ` 488K
   ON ERR CALL ("") ` Fehlersuche ist nicht mehr nötig
   If (gError=0)
      ` Arrays können erstellt werden
      ` die Operation kann fortfahren
   Else
      ALERT ("Diese Operation benötigt mehr Speicher!")
   End if
      ` Arrays werden nicht mehr benötigt
   CLEAR VARIABLE (asThisArray)
   CLEAR VARIABLE (arThisAnotherArray)

Die Projektmethode ERROR HANDLING ist folgende:

      ` Projektmethode ERROR HANDLING 
   gError:=Error ` Gib den Fehlercode zurück

Referenz

Einführung in Arrays, ON ERR CALL.


4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next