Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme unter Win98 (https://www.delphipraxis.net/91574-probleme-unter-win98.html)

MatthiasR 7. Mai 2007 10:17


Probleme unter Win98
 
Seit wir in unsrer Software eine Reihe von Neuerungen eingebaut haben, u.a. viele neue Formulare, weigert sie sich unter Win98 zu starten mit der Fehlermeldung, dass zu wenig Arbeitsspeicher vorhanden wäre:
Zitat:

Zum Starten von programm.exe ist nicht genügend Arbeitsspeicher verfügbar.
Beenden Sie andere Anwendungen, und wiederholen Sie den Vorgang.
Die Fehlermeldung erscheint jedoch unmittelbar nach Doppelklick auf die Exe. Diese wird also garnicht erst gestartet, sodass der Speicher erst volllaufen würde oder so. Die Exe ist (muss ich dazu sagen) relativ groß (ca. 26MB), was aber bisher auch noch kein wirkliches Problem darstellte. Der RAM beläuft sich auf 128MB, was ja unter Win98 eigentlich genug sein sollte. Weitere Programme laufen nicht nebenbei.

Da ich momentan sehr ratlos bin, an welchen Stellen ich überhaupt nach der Ursache suchen könnte, habe ich ein paar generelle Fragen:
  • Weiß jemand genau Bescheid, was unter Win98 diesbezüglich vielleicht noch anders läuft, als unter aktuelleren Windows-Systemen? Dass beispielsweise unter Win98 noch irgendwelche Größenbeschränkungen von Strings oder Integer-Werten bestehen, die unter neueren Systemen eben nicht vorhanden sind? Also dass ich beispielsweise in der Zwischenzeit String-Konstanten definiert habe, die so lang sind, dass sie unter Win98 nicht mehr richtig verwaltet werden können? Ist sowas in der art denkbar? Bin leider nicht so der Experte was Betriebssysteme angeht, daher keine Ahnung ob die Überlegung Sinn ergibt.
  • Gibt es irgendwelche Compilereinstellungen unter Delphi oder so, die speziell unter Win98 gesetzt werden sollten, um solche Probleme zu unterbinden?
Wie gesagt, der fehler kommt unmittelbar nach Doppelklick, sodass wirklich noch nicht besonders viel passiert sein kann. Daher tippe ich ja auf ein "grundsätzliches" Problem von Win98, NICHT darauf, dass in der Tat zu wenig Arbeitsspeicher das Problem sein sollte...

SirThornberry 7. Mai 2007 10:19

Re: Probleme unter Win98
 
ich glaub unter win9x durfte die Exe-Datei eine bestimmte Größe nicht überschreiten.

MatthiasR 7. Mai 2007 10:25

Re: Probleme unter Win98
 
Wobei unsre exe wie gesagt schon vorher so groß war, nun ist sie zwar nochmals um ein paar hundert KB größer geworden, ich denke jedoch nicht, dass genau DIE ausschlaggebend sein sollten. Wie groß darf denn unter Win98 eine exe sein??? Denn dann könnte ichs mit Sicherheit sagen!

Bernhard Geyer 7. Mai 2007 10:34

Re: Probleme unter Win98
 
26 MB? Selbst wir mit eine Anwendung mit mehreren Mannjahren Entwicklung und Multi-DB-Unterstützung, Unicode, Umfangreiches Print-Moduls kommen auf ca. 13 MB. Und jedes MB ist schon gewaltiger Mehraufwand. Hab ihr überalle MB-Große Bitmaps (umwandeln nach PNG oder JPEG) bzw. für jede Aktion werden neue Formulare definiert ohne darauf zu achten ob man nicht Formuale so anlegen könnte das diese für mehrere Aktionen verwendbar sind.

Gruber_Hans_12345 7. Mai 2007 10:43

Re: Probleme unter Win98
 
also ich hatte das selbe problem, kann aber leider nicht mehr genau sagen, wo die grenze genau ist, da wir win98 bei keinem kunden haben, und ich nur zum testen mal wieder probiert habe, ob alles auf win98 läuft, und dann gesehen habe, das dies nicht mehr der fall war (da war die EXE dann fast 30MB groß), also sehr leicht möglich, das du jetzt schon die grenze erreicht hast, (die liegt definitiv unter 30 mb)

und unsere anwendung hat mittlerweile auch schon 35mb (inklusive der komprimierten JCL Debug info)
solche größen sind schon leicht möglich (auch ohne BMP - bis auf einige ImageListen halt) aber wenn man ne menge fremdkomponenten verwendet und keine runtime libraries verwenden will

Bernhard Geyer 7. Mai 2007 10:52

Re: Probleme unter Win98
 
Zitat:

Zitat von Gruber_Hans_12345
...solche größen sind schon leicht möglich (auch ohne BMP - bis auf einige ImageListen halt) aber wenn man ne menge fremdkomponenten verwendet und keine runtime libraries verwenden will

Haben wir auch (Elpack, CoreLabs, RXLib (reste), TMS-Kompos, ...) und auch keine Runtime-Libraries. Und sind mittlerweile bei ca. 1,3 Mio. Quellzeilen die mir Delphi am Ende des Kompiliervorgangs anzeigt. Und an Mannjahren würde ich ca. 20-30 schätzen.

MatthiasR 7. Mai 2007 11:15

Re: Probleme unter Win98
 
Zitat:

Zitat von Gruber_Hans_12345
also sehr leicht möglich, das du jetzt schon die grenze erreicht hast, (die liegt definitiv unter 30 mb)

Ist das nur ne Vermutung oder was lässt dich so sicher sein, dass die Grenze "definitiv" unterhalb der 30MB liegt?

Gruber_Hans_12345 7. Mai 2007 11:19

Re: Probleme unter Win98
 
Zitat:

Zitat von Infect
Zitat:

Zitat von Gruber_Hans_12345
also sehr leicht möglich, das du jetzt schon die grenze erreicht hast, (die liegt definitiv unter 30 mb)

Ist das nur ne Vermutung oder was lässt dich so sicher sein, dass die Grenze "definitiv" unterhalb der 30MB liegt?

weil wie ich es damals getestet habe die EXE noch unter 30 mb war und ich auch nen fehler bekomme, das er die exe nicht mehr starten kann (übrigens ein packenb mit upx oder sonstigen exe packern hilft nix)


bei mir sinds mittlerweile knapp über 2.5 Mio was er am ende anzeigt, habe einfach ne menge mehr fremdkomponenten drinnen (devExpress, wp*, ReportBuilder, KeverIT, JVCL, JCL, GraphicEx, Addict, Indy10, ELPack, QueryBuilder, VST, ...)

MatthiasR 7. Mai 2007 11:20

Re: Probleme unter Win98
 
Zitat:

Zitat von Bernhard Geyer
26 MB? Selbst wir mit eine Anwendung mit mehreren Mannjahren Entwicklung und Multi-DB-Unterstützung, Unicode, Umfangreiches Print-Moduls kommen auf ca. 13 MB. Und jedes MB ist schon gewaltiger Mehraufwand. Hab ihr überalle MB-Große Bitmaps (umwandeln nach PNG oder JPEG) bzw. für jede Aktion werden neue Formulare definiert ohne darauf zu achten ob man nicht Formuale so anlegen könnte das diese für mehrere Aktionen verwendbar sind.

Japp, 26 MB. Ich kann nicht genau sagen, wie diese 26MB genau zustande kommen, da ich sooo tief in unsrem Programm noch nicht drin bin (bin relativ neu hier). Wir verwenden halt keinerlei Libraries, haben auch ne Menge Fremdkomponenten und auch sehr viele Formulare. Ich selbst habe bei den neu hinzugekommenen Formularen schon darauf geachtet, Code-Redundanz zu vermeiden, aber wenn, dann haben meine Formulare das bereits randvolle Fass quasi nur zum Überlaufen gebracht.

Luckie 7. Mai 2007 11:20

Re: Probleme unter Win98
 
Werden alle Formulare beim Start erstellt oder dynamisch, wenn sie gebraucht werden?

Bernhard Geyer 7. Mai 2007 11:28

Re: Probleme unter Win98
 
Zitat:

Zitat von Infect
Ich selbst habe bei den neu hinzugekommenen Formularen schon darauf geachtet, Code-Redundanz zu vermeiden, aber wenn, dann haben meine Formulare das bereits randvolle Fass quasi nur zum Überlaufen gebracht.

Schon mal versucht die Uses-Anweisungen zu bereinigen. Auch Klassen die nicht mehr benötigt werden können zu Speicherwuchs führen wenn sie per Uses eingebunden werden und im Initialization-Abschnitt darauf zugegriffen wird. Haben damit schon einige 100 kByte gespart. Auch würde ich mal darüber gehen das für gleiche Anforderungen immer die gleichen Controls verwendet werden (Nicht 10 Grids da jedem Entwickler ein anderes besser gefällt bzw. das gerade eine Funktion hat die das andere nicht bietet).

MatthiasR 7. Mai 2007 11:42

Re: Probleme unter Win98
 
Zitat:

Zitat von Luckie
Werden alle Formulare beim Start erstellt oder dynamisch, wenn sie gebraucht werden?

Eigentlich letzteres, allerdings kann das beim Einpflegen meiner Neuerungen in unser Testsystem auch vergessen worden sein. Ich werde mich auf alle Fälle schlau machen, weil auch ich schon die Vermutung hatte. Aber senkt das die Exe-Größe wirklich? Den Speicherbedarf zum Programmstart jedoch bestimmt, doch um wieviel?

@Bernhard: Versucht habe ich deine Tipps selbst noch nicht, ist halt nur die Frage, ob sich der Aufwand lohnt, weil wir den Support von Win98 ohnehin zum neuen Jahr kündigen wollen. Klar wäre es trotzdem sinnvoll, ein Programm auf diese Weise auszumisten, aber Zeit ist nunmal Geld. Unsre Formulare sollten jedoch recht einheitlich sein, was die Controls angeht, da wir nicht sooo viele Entwickler haben, die einen solchen Wildwuchs erzeugen könnten.

Bernhard Geyer 7. Mai 2007 12:18

Re: Probleme unter Win98
 
Zitat:

Zitat von Infect
Aber senkt das die Exe-Größe wirklich? Den Speicherbedarf zum Programmstart jedoch bestimmt, doch um wieviel?

Nein. Nur den Ressourcenbedarf beim Programmstart

Zitat:

Zitat von Infect
Versucht habe ich deine Tipps selbst noch nicht, ist halt nur die Frage, ob sich der Aufwand lohnt, ... Klar wäre es trotzdem sinnvoll, ein Programm auf diese Weise auszumisten, aber Zeit ist nunmal Geld.

Du weißt nicht wieviel Lavafluss sich so in der Zeit ansammelt wenn man nicht ab und zu mal drüberschaut. Und bei einer über 30 MB Echse tipp ich da auf einiges Optimierungspotetial.

Zitat:

Zitat von Infect
Unsre Formulare sollten jedoch recht einheitlich sein, was die Controls angeht, da wir nicht sooo viele Entwickler haben, die einen solchen Wildwuchs erzeugen könnten.

Evtl. sind ja auch einige Komponentenleichen eingebunden.

MatthiasR 7. Mai 2007 12:43

Re: Probleme unter Win98
 
Das Problem ist halt, dass uns momentan die für Optimierungsarbeiten nötige Zeit nicht zu Verfügung steht. Es brennt sozusagen an zig stellen gleichzeitig. Daher wäre es das beste, dass wir mit meinen neuen Formularen vorübergehend eine unter Win98 lauffähige Version erzeugen können und diese dann irgendwann einmal entrümpeln, wenn es gerade mal nicht so hoch her geht.

Also, wir schaun nun mal, wie wir die Exe etwas verkleinern könnten, um zumindest noch eine gewisse zeit Schonfrist zu haben.

Assertor 7. Mai 2007 12:52

Re: Probleme unter Win98
 
Hallo,

seit Ihr -sicher- mit der Größenbeschränkung der EXE unter Win98? Für mich hört sich das eher nach Problemen in Richtung

a) Swap-File zu klein (Größenzuweisung auf automatisch stellen)
b) Zu wenig freier Platz auf der System/Swap-Festplatte
c) Virusinfektion des Systems bzw. der EXE an

jeweils natürlich auf dem Target System (Win98).

Nach kurzem Googlen (deswegen der Edit):

Ich habe von einigen lauffähigen Anwendungen > 30 MB unter Win9x gelesen. Die Frage ist, wieviel Prozent der EXE Code und wieviel Ressourcen sind. Das macht ja auch schon einiges aus.

Hauptthema bei Deinem Problem ist wohl das Win9x Ressourcen Limit (teilweise nur 640 bis 1000 GDI Objekte für das ganze System inkl. aller Anwendungen).

Ich glaube nicht an ein Größenlimit der EXE (abgesehen von der zulässigen Größe einer Datei des Dateisystems unter FAT/12/16/32 und dem freien Swap-Space falls der Speicher nicht ausreicht).

Und die Unitliste kannst Du mal einfach mit der IDE Extension CnPack säubern - da kannst Du sogar sagen, ob Units mit Initilization Part auch entfernt werden dürfen. Natürlich nur nach Backup probieren ;)

Läuft hier aber schon lange einwandfrei.

Gruß winkel79

MatthiasR 7. Mai 2007 14:23

Re: Probleme unter Win98
 
Zitat:

Zitat von Infect
Zitat:

Zitat von Luckie
Werden alle Formulare beim Start erstellt oder dynamisch, wenn sie gebraucht werden?

Eigentlich letzteres, allerdings kann das beim Einpflegen meiner Neuerungen in unser Testsystem auch vergessen worden sein. Ich werde mich auf alle Fälle schlau machen, weil auch ich schon die Vermutung hatte. Aber senkt das die Exe-Größe wirklich? Den Speicherbedarf zum Programmstart jedoch bestimmt, doch um wieviel?

Also es werden wirklich nur die nötigen Formulare beim Startup direkt erzeugt, alles andre dynamisch.

@winkel79: Am virtuellen Speicher (meintest du das mit Swap-File?) wurde wohl ebenfalls schon rumgeschraubt, jedoch ohne Erfolg. Die andren Probleme schließe ich mal aus, da das Problem nicht nur auf einem 98er Rechner besteht. Wenn garnichts mehr hilft, werde ich das CnPack mal ausprobieren, danke für den Tipp!

Bernhard Geyer 7. Mai 2007 14:26

Re: Probleme unter Win98
 
Mir ist noch was eingefallen. Verwendest du schon FastMM4? Falls nein: Bau es ein. Wir sind auch mal in die Speicherfragmentierungsfehler des normalen Speichermanagers von Delphi < 2006 gefallen. Sollte zwar nicht schon zum Programmstart auftreten, aber wer weis.

Ansonsten wären Bilder (PNG/BMP's) 'ne Falle welche kaputt sind aber unter 2000/XP/Vista das Betriebssystem nicht stören aber unter Win98 komische Effekte (auch Bluescreens) verursachen können. Evtl. BMP's/PNG's von Mac-Rechnern.

MatthiasR 7. Mai 2007 15:19

Re: Probleme unter Win98
 
Könntest du mir etwas nähere Infos zu FastMM4 geben? Was macht dieser Speichermanager genau? Bei uns treten des öfteren beim Compilieren Speicherzugriffsverletzungen auf, deren gründe wir nicht nachvollziehen können. Hilft FastMM4 auch dabei? Wird das nur auf dem Entwicklungsrechner benötigt oder auf jedem Rechner, auf dem anschließend das Programm laufen soll? Wie sicher ist FastMM4? Wie einfach zu installieren? Denn ich müsste meinen Chef erstmal davon überzeugen, in so grundlegenden Dingen wie einem Speichermanager auf Fremdprodukte zu setzen, statt auf Delphi-Interna. Aber wenn der auch bei unsren andren Problemen Erfolg verspricht...

Bernhard Geyer 7. Mai 2007 15:23

Re: Probleme unter Win98
 
1, Für das Compilieren hilft es nur bedingt.

2, "Installiert" in deine Anwendung ist es ganz einfach: FastMM als ersten Eintrag in die Projektdatei

3, Sicher ist es. Ab Delphi 2006 liefert es Borland als Standard-Speichermanager mit aus.

4, Für's Debuggen muß immer eine FastMM_FullDebugMode.dll von der Anwendung erreichbar sein.

MatthiasR 7. Mai 2007 15:26

Re: Probleme unter Win98
 
Und was macht FastMM4 nun genau?

Bernhard Geyer 7. Mai 2007 15:28

Re: Probleme unter Win98
 
Also alles kau ich dir nicht vor: FastMM

MatthiasR 7. Mai 2007 15:59

Re: Probleme unter Win98
 
Mir gehts nur drum zu verstehen, wofür der genau gut ist. Speichermanagement dachte ich bisher sei Aufgabe des Betriebssystems. Sonderlich viele Infos besonders zu solchen grundlegenden Fragen bietet die sourceforge-Seite nämlich nicht.

hoika 27. Aug 2007 08:28

Re: Probleme unter Win98
 
Hallo,

jaja, der Thread ist alt.
Um noch mal auf Win98 zu kommen.

Win98 hat eine Beschränkung der Ressourcen-Anzahl.
Diese darf eine bestimmte Zahl (16k oder 64k) nicht überschreiten.
Jedes Form, jedes Bitmap, jede String-Tabelle stellt eine Ressource dar.

Abhilfe schafft meistens upx, damit kann man die Exe packen.

Bei mir hat es (bis letzten Freitag) geklappt,
jetzt geht upx aber auch nicht mehr ;(

Hier kann man jetzt nur noch Funktionen auslagern,
z.B. in Dlls.


Interessant wäre ein Programm, dass die Ressoucen zählen würde.



Heiko

Bernhard Geyer 27. Aug 2007 08:39

Re: Probleme unter Win98
 
Zitat:

Zitat von hoika
Win98 hat eine Beschränkung der Ressourcen-Anzahl.
Diese darf eine bestimmte Zahl (16k oder 64k) nicht überschreiten.
Jedes Form, jedes Bitmap, jede String-Tabelle stellt eine Ressource dar.

Abhilfe schafft meistens upx, damit kann man die Exe packen.

Und wie soll es das machen? Ich denke eher du Umgehst "nur" das Problem mit der größe der Exe unter alten Windows-Versionen. Bei dynamische Anforderungen von Ressourcen bzw. unnötig erzeugten Formulare kann UPX auch nichts machen.

hoika 27. Aug 2007 09:36

Re: Probleme unter Win98
 
Hallo,

Win9x zählt beim Start die Ressourcen,
ist die Anzahl zu gross -> "Nicht genügend Arbeitsspeicher".

UPX macht irgendwas mit der Exe (klar Exe-Packer),
die Exe, die Win98 "sieht", ist viel kleiner,
hat also eine kleinere Anzahl von Ressourcen.
Die grosse Exe hängt quasi hintendran.

Wie die das machen, ist mir egal ;)
Einfach mal ausprobieren.

Bisher hat das Packen mit upx bei dem Fehler immer geholfen,
nur leider kommt halt ab Freitag bei mir wieder diese Meldung ;(



Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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