Optimieren von Formularen und Steuerelementen
Die Formulare und Steuerelemente der Anwendung bieten oft viele Ansatzmöglichkeiten für Verbesserungen.
Verwendung der Datenumgebung
Wird die Datenumgebung des Formular- oder Berichts-Designers verwendet, werden Tabellen wesentlich schneller geöffnet, als wenn Sie im Load-Ereignis des Formulars einen der Befehle USE, SET ORDER oder SET RELATION aufrufen. Bei Verwendung der Datenumgebung verwendet Visual FoxPro Low-Level-Aufrufe zum Öffnen von Tabellen und Einrichten von Indizes und Beziehungen.
Beschränken der Anzahl der Formulare in einem Formularsatz
Sie sollten Formularsätze nur dann einsetzen, wenn eine Anzahl von Formularen die gleiche private Datensitzung gemeinsam nutzen soll. Bei der Verwendung von Formularsätzen erstellt Visual FoxPro Instanzen aller Formulare und aller Steuerelemente aller Formulare des Formularsatzes, selbst wenn nur das erste Formular des Formularsatzes angezeigt werden soll. Dies kann sehr zeitaufwendig sein und ist unnötig, wenn die Formulare keine private Datensitzung gemeinsam nutzen müssen. Stattdessen sollten Sie für andere Formulare DO FORM aufrufen, sobald diese benötigt werden.
Wenn Sie andererseits Formularsätze verwenden, werden Sie beim Zugriff auf die Formulare des Formularsatzes eine Leistungsverbesserung feststellen, da diese Formulare bereits unsichtbar geladen sind.
Dynamisches Laden von Seiten-Steuerelementen in Seitenrahmen
Seitenrahmen laden, wie Formularsätze, beim Laden die Steuerelemente aller Seiten. Dadurch tritt eine deutliche Verzögerung auf. Um dies zu verhindern, können Sie Seiten-Steuerelemente bei Bedarf dynamisch laden, indem Sie aus den Steuerelementen einer Seite eine Klasse erstellen und diese beim Aktivieren der Seite laden.
So laden Sie Seiten-Steuerelemente dynamisch
Entwerfen Sie wie gewohnt das Formular einschließlich aller Steuerelemente auf den Seiten.
Sind Sie mit dem Entwurf fertig, gehen Sie zur zweiten Seite des Seitenrahmens und speichern die dortigen Steuerelemente als eine Klasse.
Öffnen Sie die erstellte Klasse und vergewissern sich, dass Größe, Position und Eigenschaften der Steuerelemente noch stimmen.
Wiederholen Sie die Schritte 2 und 3 für alle folgenden Seiten des Seitenrahmens.
Fügen Sie im Ereignis Activate der zweiten und aller folgenden Seiten des Seitenrahmens Objekte hinzu und machen diese sichtbar.
Haben Sie z. B. die Steuerelementklasse
cnrpage1
benannt, kann folgender Code hinzugefügt werden:
IF THIS.ControlCount = 0 THIS.AddObject("cnrpage1","cnrpage1") THIS.cnrpage1.Visible = .T. ENDIF
Dynamische Bindung von Steuerelementen an Daten
Sie können die Ladezeit für ein Formular mit vielen an Daten gebundene Steuerelemente verkürzen, indem Sie die Bindung dieser Steuerelemente so lange hinauszögern, bis diese benötigt werden.
So binden Sie Steuerelemente dynamisch an Daten
Holen Sie die Tabellen und Ansichten des Formulars in die Datenumgebung, damit diese beim Laden des Formulars geöffnet werden.
Fügen Sie dem Ereignis GotFocus jedes gebundenen Steuerelements Code hinzu, der das Steuerelement an den Datenwert bindet. So bindet z. B der folgende Code ein Kombinationsfeld-Steuerelement an das Feld
customer.company
:* Check to see if the control has been bound yet. IF THIS.RecordSource = "" * Set the record source to the right value * and set the record source type to "fields" THIS.RecordSource = "customer.company" THIS.RecordSourceType = 6 THIS.Refresh ENDIF
Hinauszögern der Bildschirmaktualisierung
Wenn Sie am Bildschirm mehrere Änderungen auf einmal vornehmen (z. B. gleichzeitig die Werte mehrerer Steuerelemente ändern), können Sie die Gesamtzeit zur Aktualisierung des Bildschirms reduzieren, indem die Aktualisierung so lange hinausgezögert wird, bis alle Änderungen vollzogen sind. Werden z. B. Steuerelemente aktiviert oder deaktiviert, ihre Farben geändert oder in gebundenen Steuerelementen Datensätze verschoben, ist es wesentlich effizienter, das Zeichnen dieser Steuerelemente bis zum Abschluss aller Änderungen hinauszuzögern.
So zögern Sie die Bildschirmaktualisierung hinaus
- Setzen Sie die Eigenschaft LockScreen des Formulars auf Wahr (.T.).
- Aktualisieren Sie die Steuerelemente nach Bedarf.
- Rufen Sie die Methode Refresh des Formulars auf.
- Setzen Sie die LockScreen-Eigenschaft des Formulars auf Falsch (.F.).
Das folgende Beispiel ändert die Anzeigeeigenschaften mehrerer Steuerelemente auf einmal, verschiebt den Datensatzzeiger auf einen neuen Datensatz und aktualisiert erst dann den Bildschirm mit den neuen Informationen. Wäre LockScreen nicht auf Wahr gesetzt, würde jede dieser Operationen das betreffende Steuerelement neu zeichnen und die Gesamtzeit für die Aktualisierung drastisch verlängern.
THISFORM.LockScreen = .T.
THISFORM.MyButton.Caption = "Save"
THISFORM.MyGrid.BackColor = RGB (255, 0, 0) && Red
SKIP IN customers
SKIP IN orders
THISFORM.Refresh
THISFORM.LockScreen = .F.
Tipp Diese Technik bietet keine Vorteile, wenn Sie nur ein einzelnes Steuerelement aktualisieren.
Reduzieren von Code in häufig verwendeten Methoden
Da die Methode Refresh und das Ereignis Paint häufig aufgerufen werden, können Sie die Leistung eines Formulars durch Reduzierung des Codes in diesen Methoden erhöhen. Analog dazu können Sie zur Reduktion der Ladezeit von Formularen Code aus dem Ereignis Init in seltener verwendete Ereignisse wie Activate, Click oder GotFocus verschieben. Dann kann eine Eigenschaft des Steuerelements (z. B. Tag oder eine benutzerdefinierte Eigenschaft) verwendet werden, um festzuhalten, ob das Steuerelement nur einmal benötigten Code bereits ausgeführt hat oder nicht.
Siehe auch
Verwenden von Rushmore™ zum Beschleunigen des Datenzugriffs | Optimierung von Programmen | Optimieren von Anwendungen | Optimieren des Systems