![]() |
Forms direkt oder zur Laufzeit erzeugen ?
Hi,
wo sind die Vor- und Nachteile der Erzeugung einer Form zur Runtime oder schon zur Designtime ? Bzw. wie wirkt sich das ganze aus ? Sagen wir mal bei mind. 200 Forms. |
Re: Forms direkt oder zur Laufzeit erzeugen ?
Das macht sich im Speicherbedarf ganz gehörig bemerkbar.
Wir haben noch kleine Anwendungen mit ca. 100 - 150 Formularen und bereits hier werden Formulare ausschliesslich zur Runtime erzeugt. Zumal das die Anwendung auch bereits deutlich schneller macht. |
Re: Forms direkt oder zur Laufzeit erzeugen ?
Zitat:
|
Re: Forms direkt oder zur Laufzeit erzeugen ?
Das Laden geht wahrscheinlich schneller, da erstmal nur das Hauptformular in den Speicher muß.
|
Re: Forms direkt oder zur Laufzeit erzeugen ?
Zitat:
Eas mit dem Freigeben vom Speicher ist ja nicht so wild. Ich erzeuge auch alle Fenster zur Laufzeit.
Delphi-Quellcode:
Wieviel Speicher ein Fensterbenötigt ist wohl in ersterlinie von den Komponenten, Variablen und evnt. Images abhängig die in der Form verwendet werden.
procedure TForm1.Button1Click(Sender: TObject);
var window : TForm2; // Kunden-Formular begin window := TForm2.Create(self); try with window do //z.B. Übergabe von Werten an Variabeln die im Public-Teil stehen kunden_id := xxx; modus := sb_readonly; ShowModal finally FreeAndNil(window); end; |
Re: Forms direkt oder zur Laufzeit erzeugen ?
Wenn man das alles so liest, benutzen die meisten wohl das Erzeugen zur Laufzeit. Und nicht nur hier. Ich denke aber, das kommt noch von Zeiten des knappen Speichers. Trotz 128 MB und mehr sollte man trotzdem nicht anfangen, so zu programmieren, als sei unendlich viel Speicher vorhanden. Aber die Gefahr besteht trotzdem, daß man etwas nicht mehr freigibt und so dann wieder den Speicherbedarf unnötig in die Höhe treibt.
Und es gibt noch einen Effekt: beim erstmaligen verwenden (automatisch)einer Form, tritt schon eine merkbare Verzögerung auf. Beim zweiten mal nicht mehr. Würde die Form immer von Hand neu erzeugt, gelöscht usw. und die Verzögerung würde dauernd vorhanden sein, so wäre das schon schlechter. Vielleicht wird der Speicher aber doch irgendwann knapp, wenn mans nicht so macht. D.h., ich bin genauso schlau wie vorher. :bounce1: Wie meistens ist wohl der goldene Mittelweg gefragt. Der sieht dann so aus, die Forms in 2 Arten aufzuteilen, oft und weniger oft benötigte. Letztere dann immer erst zur Laufzeit erzeugen. Die von Sharky angesprochenen Datenmodule z.B. würde man besser wohl direkt beim Programmstart erzeugen, da man die ohnehin braucht. |
Re: Forms direkt oder zur Laufzeit erzeugen ?
Das hat nicht nur mit Speicherbedarf zu tun.
Stell Dir vor, Du hast eine Anwendung mit 200 Formularen und alle (oder auch nur die wichtigsten) werden beim starten der Apllikation geladen. Wenn Du nun einen Rechner hast mit wenig Arbeitsspeicher, dann fängt der schon an auszulagern, während noch nichtmal alles geladen ist. Damit dann noch vernünftig zu arbeiten kannst Du vergessen. Wie gesagt: Wir haben grosse und komplexe Anwendungen die von Unternehmen eingesetzt werden denen SAP zu oversized ist. Und bis auf das Mainform werden ausnahmslos alle Formulare zur Laufzeit erzeugt. Und langsamer werden unsere Anwendungen dadurch nicht ;-) Okay, wir gehen da auch sehr streng mit der Trennung von User-Interface und Datenbehandlung um. Du könntest ohne weiteres hingehen, ein Formular einfach entfernen, ein Web-Formular einfügen und schon läuft alles per Webbrowser. Sollte so etwas später möglich sein ist es unabdingbar, Formulare erst dann zu erzeugen, wenn sie gebraucht werden. Zum Teil weis man vorher noch nichtmal, welches von z.B. 5 möglichen Formularen für eine Aufgabe gerade gewollt ist :) Aber das sind wie gesagt hochkomplexe Applikationen. Im Prinzip muss das jeder für sich entscheiden wie er das handelt. |
Re: Forms direkt oder zur Laufzeit erzeugen ?
Moin Zusammen,
was mir in diesem Zusammenhang noch einfällt: Je nach Betriebbsystem kann man auch bei vielen Formularen Probleme mit den Resourcen, in diesem Zusammenhang speziell, den Handles bekommen, wenn die Formulare mit ihren Steuerelementen sofort beim Programmstart erzeugt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz