AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Forms direkt oder zur Laufzeit erzeugen ?

Ein Thema von Hansa · begonnen am 20. Sep 2003 · letzter Beitrag vom 21. Sep 2003
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Forms direkt oder zur Laufzeit erzeugen ?

  Alt 20. Sep 2003, 15:26
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#2

Re: Forms direkt oder zur Laufzeit erzeugen ?

  Alt 20. Sep 2003, 15:29
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Forms direkt oder zur Laufzeit erzeugen ?

  Alt 20. Sep 2003, 15:36
Zitat von Phoenix:
...Zumal das die Anwendung auch bereits deutlich schneller macht.
Wieso schneller ? Wenn die Formulare im Speicher vorhanden sind, was geht da noch schneller ? Außerdem muß man sich doch auch selber drum kümmern, den Speicher wieder freizugeben. Aber noch eine andere Frage: Wovon hängt es ab, wieviel Speicher die Dinger brauchen ? Tja, ich habe hier zig Programme und das soll irgendwann mal eins werden, deshalb stellen sich langsam diese Fragen.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Forms direkt oder zur Laufzeit erzeugen ?

  Alt 21. Sep 2003, 04:06
Das Laden geht wahrscheinlich schneller, da erstmal nur das Hauptformular in den Speicher muß.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Forms direkt oder zur Laufzeit erzeugen ?

  Alt 21. Sep 2003, 08:45
Zitat von Hansa:
Wieso schneller ? Wenn die Formulare im Speicher vorhanden sind, was geht da noch schneller ? Außerdem muß man sich doch auch selber drum kümmern, den Speicher wieder freizugeben. Aber noch eine andere Frage: Wovon hängt es ab, wieviel Speicher die Dinger brauchen ? Tja, ich habe hier zig Programme und das soll irgendwann mal eins werden, deshalb stellen sich langsam diese Fragen.
Angenenommen Du hast im OnCreate der Formen "Zeitintensive" Dinge wie z.B. das öffenen einer Datenbank inkl. Verbinden und ausführen einer Abfrage. Wenn dies nun in jeder Form wäre und jede Abfrage nur 200ms braucht kannst Du ausrechnen wie lange es dauert bis deine gesamte Anwendung fertig gestartet ist.

Eas mit dem Freigeben vom Speicher ist ja nicht so wild. Ich erzeuge auch alle Fenster zur Laufzeit.

Delphi-Quellcode:
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;
Wieviel Speicher ein Fensterbenötigt ist wohl in ersterlinie von den Komponenten, Variablen und evnt. Images abhängig die in der Form verwendet werden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: Forms direkt oder zur Laufzeit erzeugen ?

  Alt 21. Sep 2003, 11:26
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. 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#7

Re: Forms direkt oder zur Laufzeit erzeugen ?

  Alt 21. Sep 2003, 12:45
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Forms direkt oder zur Laufzeit erzeugen ?

  Alt 21. Sep 2003, 14:14
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz