Hi Leute,
erstmal vielen Dank für eure Hilfe.
Die Rechner sind wirklich grosszügig mit Speicher ausgestattet (ca. 1-1,5 GB
Ram)
also wird es daran nicht liegen. Betriebssystem ist WindowsXP, Debuginfos, Warnungen,
Hinweise und TD32-Infos sind alle ausgeschaltet, Viren kann man auch vernachlässigen.
Mir kommt es so vor das zu wenig Speicher vorhanden ist, wie bei den früheren
BDE-Fehlermeldungen, wenn diverse Sessions gleichzeitig geöffnet waren und der
gemeinsame Speicher nicht ausreichend war oder - wer den Clipper noch kennt -
die Fehlermeldung mit dem "Memory overbooked". Nach dem compilieren wird gelinkt
und kurz vor dem Ende des Linkvorgang kommt dann öfters die Meldung:
"Fataler Fehler: Zu wenig Arbeitsspeicher". Manchmal erscheint auch eine Meldung
das eine Resource einer willkürlichen *.dfm nicht geöffnet werden kann. Diese Dateien
sind natürlich vorhanden. Dies ist dann oft der Punkt, bei dem man schnell noch
versucht die offenen Dateien zu speichern (save often, save early), da
Delphi ab diesem Zeitpunkt extrem kritisch reagiert.
Es kann sein, das die *.exe dann manchmal trotzdem erstellt wird.
Weiterhin kann es sein, das es mehrere Tage ohne jegliche Probleme funktioniert,
aber dann am nächsten Tag nach dem Einschalten des Rechners und dem ersten
Compiliervorgang überhaupt nicht mehr.
Ja es hört sich alles wirklich strange an, aber es ist einfach so.
Deshalb steht ja auch die Frage im Raum, ob es ein Fehler im Compiler/Linker
wäre und eine Umstellung auf D7 oder höher etwas bringen würde. Es ist eine
gewachsene Anwendung, die hier und dort suboptimal ist und man noch ein wenig
"aufräumen" könnte, aber ob dies einen wirklichen Durchbruch bringen würde,
höchstens einen Aufschub auf die nächste Obergrenze. Deshalb auch der Gedanke
zu Runtime-Packages und der Aufsplittung der einzelnen Module. Nur habe ich
ehrlich gesagt noch keine sehr grosse Erfahrung über die optimale Vorgehens-
weise beim Erstellen von Runtime-Packages.
Unter Win95/98 ist die Anwendung seit der Größe von ca. 33 MB nicht mehr
lauffähig (zb. "ungültiges Format der Anwendung")
Zu den Formularen: Es sind überwiegend relativ komplexe Formulare, die keine
oder sehr sehr wenig Grafiken enthalten (wenn dann nur kleine Glyphs). Jedoch
enthalten die Formulare überwiegend mindestens einen oder mehrere Grids (TopGrid),
Tabellen, Querys (mit statischen Feldlisten), viele TEdits und TLabels, mehrere
TButtons (alle von Raize-Components) und das wars dann auch schon.
Die grösste *.dfm ist ungefähr 500k gross (TextDFM-Format), verwendert werden
ungefähr 1200 Tabellen. Die Gesamtgrösse aller *.pas und *.dfm (TextDFM) ohne
Bibliotheken (8MB) ist in etwa 100 MB.
Es sind alle Formulare in der zweiten Uses im Hauptform aufgeführt und diese werden
über eine Funktion im Hauptformular aufgerufen a la:
class function <FormKlasse>.Execute(...)
Diese Methode prüft ob die Form schon vorhanden ist und erstellt/initialisiert
gegebenenfalls die Form:
<MDIForm> := <FormKlasse>.Create(Application);
Der Unterschied der optimierten zur Debug-Version ist gering, im Ganzen etwa
500 kb bis 1 MB.
Grafiken werden im allgemeinen fast keine und wenn dann sehr sehr sparsam
verwendet.
SQL's werden im *.pas hinterlegt, vielleicht würde ein
SQL-Dictionary
den Source entsprechend verringern. Beschreibungsfelder (Labels, Gridspalten)
werden zur Laufzeit übersetzt, das dürfte aber keine Rolle spielen.
@Heiko.
Leider sind die Forms an sich so unterschiedlich, das Frames nicht möglich sind.
Für die Buttonleiste (Neu, Ändern, Speichern,...) wird ein dynamischess Frame
verwendet, das sich automatisch an die Formulare (Ableitung von TForm) anlagert
Grüsse Gremlin