Freigeben über


Optimierung von Programmen

Durch sorgfältige Programmierung können Sie Programme erstellen, die sehr schnell ausgeführt werden können. In Visual FoxPro gibt es mehrere Möglichkeiten zur Verbesserung der Leistung eines Programms:

  • Befolgen der folgenden allgemeinen Tipps zur leistungsfähigen Programmierung.
  • Verwenden von Namensausdrücken anstelle Makrosubstitution.
  • Effizienter Verweis auf Objekteigenschaften.

Allgemeine Tipps zur leistungsfähigen Programmierung

Beachten Sie die folgenden Empfehlungen, um leistungsfähige Programme zu erstellen.

  • Wählen Sie für Ihre Daten den passenden Datentyp. Verwenden Sie insbesondere für numerische Daten nach Möglichkeit den Typ Integer, da dieser am effizientesten verarbeitet wird. Verwenden Sie ebenfalls nach Möglichkeit für Primär- und Fremdschlüsselwerte den Datentyp Integer, da dieser zu kleineren Datendateien, kleineren (und daher schnelleren) Indizes und schnelleren Verknüpfungen führt.

    Anmerkung   Ein Beispiel zur Erstellung eines kleineren (und damit schnelleren) Indexes finden Sie in Solution.app im Visual FoxPro-Verzeichnis ...\Samples\Solution. Wählen Sie Beispiele in gefilterter Liste anzeigen, wählen aus der Dropdown-Liste Indizes und wählen aus der dann angezeigten Liste Erstellen kleiner Indizes mit BinToC().

  • Vermeiden Sie das erneute Öffnen von Dateien, da dadurch die Leistung beeinträchtigt wird. Weisen Sie die Dateien stattdessen beim Öffnen Arbeitsbereichen zu und verwenden dann nach Bedarf zur Auswahl bestimmter Arbeitsbereiche den Befehl SELECT.

  • Verwenden Sie nach Möglichkeit FOR … ENDFOR-Schleifen statt DO WHILE … ENDDO-Schleifen, da diese schneller sind.

  • Beim Kopieren von Daten aus mehreren Feldern ist SCATTER TO ARRAY schneller als SCATTER MEMVAR.

  • Zur effizienten Ausnutzung des Arbeitsspeichers sollten Sie Objekte erst dann erstellen, wenn Sie diese benötigen und sie nach der Verwendung sofort wieder löschen.

    Tipp   Durch Aufruf der Funktion SYS(1016) können Sie feststellen, wie viel Arbeitsspeicher jedes Objekt belegt.

  • Schicken Sie Ausgaben nach Möglichkeit zu dem Fenster, das sich im Vordergrund befindet, da die Aktualisierung von Fenstern im Hintergrund deutlich langsamer ist. Die durchlaufende Ausgabe in einem Hintergrundfenster gehört zu den ungünstigsten Ereignissen.

  • Deaktivieren Sie mit Hilfe des Befehls SET TALK OFF die Statusanzeige. Dadurch werden weniger Bildschirmaktualisierungen benötigt.

  • Setzen Sie den Befehl SET DOHISTORY auf OFF, damit das Befehlsfenster nicht bei jedem Aufruf des Programms aktualisiert wird.

Verwenden von Namensausdrücken anstelle Makrosubstitution

Die Programmleistung kann signifikant verbessert werden, wenn anstatt Makrosubstitution Namensausdrücke verwendet werden. Wird z. B. der Variablen cFile ein Wert zugewiesen, ist ein mittels cFile erstellter Namensausdruck schneller als eine Makrosubstitution.

cFile = "CUST"
use &cFile      && Macro substitution, slow
use (cFile)      && Name expression: faster, preferred

Effizienter Verweis auf Objekteigenschaften

Das Verständnis des Umgangs von Visual FoxPro mit Eigenschaften und Objekten ermöglicht es Ihnen, Ihre Anwendung noch effizienter zu gestalten.

Optimieren wiederholter Verweise auf eine Eigenschaft

Wenn Sie mit der Syntax object.property auf eine Objekteigenschaft verweisen, muss Visual FoxPro das Objekt suchen, bevor es auf die Eigenschaft zugreifen kann. Beim wiederholten Zugriff auf diese Eigenschaft, kann durch die Suchstrategie die Leistung reduziert werden.

Um nicht wiederholt auf dieselbe Prozedur zu verweisen (z. B. in einer Schleife), können Sie den Wert der Eigenschaft einer Variable zuweisen, Änderungen vornehmen und die Eigenschaft dann festlegen. So setzt z. B. der folgende Code ein Eigenschafts-Array, indem das Array zunächst im Arbeitsspeicher erstellt, gefüllt und abschließend nur einmal der Eigenschaft zugewiesen wird:

* Copy string to a local variable
lcChar = THISFORM.cCharString
LOCAL laCharArray[256]   && Create local array
FOR nCounter = 1 to 256
   laCharArray[x] = SUBSTR(laChar,x,1)
ENDFOR
* Copy the local array to the property array
ACOPY(laCharArray,THISFORM.aCharArray)

Effizientes Verweisen auf mehrere Objekteigenschaften

Wird nicht nur eine Eigenschaft eines Objekts aktualisieret, muss Visual FoxPro das Objekt mehrmals suchen, wodurch die Leistung beeinträchtigt werden kann. Im folgenden Beispiel muss Visual FoxPro durch vier Objekte (THISFORM, pgfCstInfo, pgCstName und txtName) suchen, um die zu setzenden Eigenschaften zu finden. Da dieser Code zwei Eigenschaften setzt, muss diese vierfache Suche zweimal durchgeführt werden:

THISFORM.pgfCstInfo.pgCstName.txtName.Value = ;
 "Fred Smith"
THISFORM.pgfCstInfo.pgCstName.txtName.BackColor = ;
 RGB (0,0,0)  & Dark red

Zur Vermeidung dieses überflüssigen Aufwands können Sie den Befehl WITH … ENDWITH einsetzen. Dabei wird Visual FoxPro nur einmal dazu veranlasst, das Objekt zu suchen. Das folgende Beispiel führt, wie das vorhergehende, dieselbe Aktion schneller aus.

WITH THISFORM.pgfCstInfo.pgCstName.txtName
   .Value = "Fred Smith"
   .BackColor = RGB (0,0,0)  & Dark red
ENDWITH

Sie können auch einen Verweis auf ein Objekt in einer Variable speichern und diese Variable anstelle des Objektverweises verwenden:

oControl = THISFORM.pgfCstInfo.pgCstName.txtName
oControl.Value = "Fred Smith"
oControl.BackColor = RGB (0,0,0)  & Dark red

Siehe auch

Optimieren von Formularen und Steuerelementen | Optimierung von ActiveX-Steuerelementen | Optimieren von Anwendungen | Optimieren des Systems | SELECT_Befehl | FOR … ENDFOR-Befehl | SCATTER-Befehl