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-Typ | Speicherbelegung 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.