Autor Beitrag
Snoopie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

XP Prof
D7 Ent
BeitragVerfasst: Mi 21.07.04 11:10 
Hallo,

unser Projekt hat inzwischen so viele Formulare etc., dass die Software unter Windows 9x nicht mehr läuft, da dort die Resourcen (durch Beschränkung der Handles) verbraucht sind.

Da wir die Anwender nicht zum Umstieg auf Windows XP (, NT oder 2000) zwingen können, suchen wir nach einer Lösung.

Ein Modul haben wir inzwischen per Compilerschalter abgetrennt, so dass dessen Units (und Formulare) nur eingebunden werden, wenn der Schalter gesetzt ist. Die Anwender, die dieses Modul (noch) nicht benötigen, sind so vorerst gerettet.
Ebenso wurden Image-Resourcen ausgelagert, sowie die Datenbank-Komponenten.

Die Software wächst jedoch weiter, und ein weiteres Aufspalten wäre durch den entstehenden Verwaltungsaufwand unwirtschaftlich.

Ich habe mehrere Beiträge gefunden, die die Ursache erklären, aber keine Lösung. :(

Wer kennt eine, bzw. zumindest Hinweise, wie wir das Problem angehen und lösen können :?: :!:

Danke!

_________________
Snoopie
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 21.07.04 12:05 
Hallo!

Werden die Formulare automatisch zu Programmstart erzeugt? Siehe Projekt\Optionen\Formulare.

Cu,
Udontknow
Snoopie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

XP Prof
D7 Ent
BeitragVerfasst: Mi 21.07.04 12:09 
Nein, nur das Hauptformular (MDI Hauptfenster).
Alle anderen (Childs) stehen in der Liste Verfügbare Formulare, werden also dynamisch erzeugt.

_________________
Snoopie
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mi 21.07.04 12:24 
Tja, dass ist das einzigste, was ihr machen könnt. Resourcen sparen. Wenn eurer Projekt jetzt schon nicht richtig läuft, wie läuft es dann erst, wenn der User einen Taschenrechner öffnet. D.h. keine TImagekomponenten verwenden, wenn ein Image gebraucht wird (WM_PAINT): laden, zeichnen, entladen. Das muss mit allen Resourcen gemacht werden. Eine andere Möglichkeit gibt es leider nicht.

Viel Spaß...

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Snoopie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

XP Prof
D7 Ent
BeitragVerfasst: Mi 21.07.04 12:34 
Wenn Formulare weggenommen werden, läuft es auch unter Windows 9x.
Heißt das, dass Delphi die Resourcen auch anfordert, wenn (besser gesagt bevor) die Formulare dynamisch geladen werden?
:?

_________________
Snoopie
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mi 21.07.04 12:46 
Habt ihr die "var Form1:TForm1" Blöcke entfernt (natürlich nur bei den dynamischen ;) )

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Snoopie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

XP Prof
D7 Ent
BeitragVerfasst: Mi 21.07.04 12:52 
Ja :?

_________________
Snoopie
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mi 21.07.04 13:04 
Und an einer Variable kann es ja wohl nicht liegen, wenn diese nicht initialisiert wird...

Cu,
Udontknow
maxk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mi 21.07.04 13:08 
War ja auch nur so 'ne Idee :roll:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mi 21.07.04 17:36 
Moin!

Das Problem hatte ich auch - nur etwas anders. Durch den statischen GDI Handle Pool von Win9x musste ich meinem Programm eine Klasse spendieren die Bitmaps auf einem grossen Bitmap verwaltet und somit nur noch ein Bitmap Handle anstatt die vielen einzelnen verbraucht. Mein Programm benötigt bis zu 7000 TBitmap Instanzen zur Laufzeit, daher war es auch unter Windows 9x nicht mehr lauffähig. Sowas in der Richtung habt ihr nicht? Ansonsten könnte ich euch mit Rücksprache in meiner Firma die Klasse zur Verfügung stellen (damit wars dann wieder lauffähig). Diese versucht die Bitmaps automatisch platzsparend anzuordnen und dreht die Bilder auch um 90° für eine bessere Verteilung. (Hätte ich mal als Patent anmelden sollen)

MfG
Muetze1
Snoopie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

XP Prof
D7 Ent
BeitragVerfasst: Do 22.07.04 09:16 
Danke für die Antworten bisher.

Die Bilder sind bereits ausgelagert (in eigener DLL). Das Problem liegt an der Anzahl der enthaltenen Formulare (Frames).
Bei Start der EXE werden bereits entsprechende Mengen an Handles angefordert, unabhängig davon, dass diese Formulare erst später dynamisch geladen werden. :(

Einzige Lösung scheint momentan der Aufwand, die Anwendung zu unterteilen in DLLs, welche dann ihre eigenen Resourcenbereiche mit den ausreichend zur Verfügung stehenden Handles haben. :cry:

Das ist natürlich mit Aufwand verbunden...

Hat jemand Erfahrung, oder doch noch eine andere Idee :?: :?:

_________________
Snoopie