4D v16.3

Arrays und Speicher

Home

 
4D v16.3
Arrays und Speicher

Arrays und Speicher  


 

 

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-TypFormel für Speicherbelegung in Bytes
Boolean(31+Anzahl der Elemente)/8
Datum(1+Anzahl der Elemente) * 6
String(1+Anzahl der Elemente) * (Summe der Größe jedes Texts)
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) * (Summe der Größe jedes Texts)
Zweidimemsional(1+Anzahl der Elemente) * 12 + Summe der Größe jedes Array

Hinweise:

  • Die Größe eines Textes im Speicher wird mit der Formel ((Länge + 1)* 2) berechnet.
  • 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



Siehe auch 

Einführung in Arrays
ON ERR CALL

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Arrays

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)