![]() |
zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Hallo DP'ler!
Mein Programm bricht sporadisch mit dem Fehler "zu wenig Arbeitsspeicher" ab. Da ich an meinem Arbeitsplatz diesen Fehler nicht nachvollziehen kann, möchte ich im entsprechenden Form diesen Fehler mit Try - Exception abfangen - um wenigstens die Änderungen in die Datenbank zu schreiben. Jetzt meine Frage: wie muß der Try - Exception - Block aussehen? (except on E: Exception??? do) Gibt es soetwas wie ein "Exception_zuwenig_Speicher"? Ich vermute, daß mein Programm beim Umspeichern eines Images in ein Bitmap Probleme bekommt. Vielen Dank für Eure Hilfe. Mit freundlichen Grüßen Ines PS. Delphi2009 und WinXP |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
also die Exception nennt sich EOutOfMemory
so könntest du nur diese gezielt abfangen und alle anderen Exceptions "unbehandelt" durchlassen
Delphi-Quellcode:
try
... except on EOutOfMemory do begin ... //Raise; // Exception eventuell erneut auslösen, nachdem sie behandelt wurde end; else Raise; end; |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Zitat:
Zitat:
Ein Tipp noch: Ältere Windows Versionen hatten Probleme, wenn eine Anwendung sehr viele GDI Handles 8Also handles für grafische Objekte) benötigte. Allerdings bezog sich dann die Fehlermeldung auf die Ressourcen und nicht den Speicher. |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Hallo Luckie,
ich hab' den Fehler schon bei mir (und meinem Programm gesucht)! :gruebel: ReportMemoryLeaksOnShutdown bringt jetzt (nach Beheben der angezeigten Probleme) keine Anzeige mehr - damit sollten doch dann alle Speicherlecks ausgemerzt sein, oder? Mein Arbeitsplatzrechner und die betroffenen Rechner unterscheiden sich erheblich. Gleich ist eigentlich nur, daß auf allen XP läuft. Meiner hängt nicht in der Domäne, die anderen schon, ich habe "nur" 2 Bildschirme, die anderen 3 usw. Deswegen habe ich ja solche Probleme, den Fehler "einzugrenzen". Muß es denn wirklich immer mein Programm sein? Wenn Du noch eine Idee hast - laß' es mich bitte wissen - bin für alles dankbar. Hallo Himitsu, danke für Deine Hilfe - ich werde die Exception gleich in mein Programm einbauen. |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Zitat:
Zitat:
Zitat:
|
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
ReportMemoryLeaksOnShutdown liefert aber nur Informationen zur Speicherreservierung im Delphi-MemoryManager (FastMM),
also was direkt über die WinAPI läuft oder was z.B. irgendwelche Handles betrifft, wird dabei nicht beachtet. |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Hallo Hier kann ich evt. helfen, da wir vor kurzem ein ähnliches Problem hatten
Beobachte während der Programmausführung die Speicherauslastung deiner Anwendung. Aber nicht im TaskManager des Betriebssystems, sondern beobachte den "VirtuellenSpeicher" deiner Anwendung im z.b. ProcessEXplorer von SysInternals. Da siehst du was wirklich belegt wird. Und bei 2GByte ist bei Win32 Schluss. Und wenn du keine Auslagerungsdatei hasrt und nur 1GByte, dann entspr früher. |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Hallo und sorry, wenn ich nochmals nerve! :?
Ich habe den ProcessExplorer runtergeladen und versucht auf Speicherlecks zu kommen. Der Parameter Virtual Memory - Peak Private Bytes steigt an - damit habe ich im Programm ein (oder mehrere) Speicherlecks. Ich war immer der Meinung, daß ein Formular "sich selbst" aufräumt und ich nur für die im Programmcode mit "Create" definierten Komponenten zuständig bin. Könnt' Ihr mir bitte ein paar Tipps geben, wo sich in meinem Programm Schwachstellen befinden könnten? Mithilfe dieses Programmes werden in unserer Klinik Befunde erstellt. Es sind also einige "Bildbearbeitungsroutinen" (Laden, Speichern, Zeichnen, Beschriften) und andererseits DB-Abfragen und Edit-Felder (RTF, für Befund, Fragestellung usw.) darin enthalten. Vielen Dank für Eure Geduld Mit freundlichen Grüßen Ines |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Hallo Ines,
vielleicht kanst Du ja mit der Hilfe von ![]() In der mitgelieferten .inc Datei lassen sich diverse Optionen einstellen. Grüße Klaus |
Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Vorsicht. Der Speichermanager von Delphi gibt Speicher, den man freigibt, nicht sofort an Windows zurück, so dass dieser Wert im Taskamanager oder Prozessexplorer nicht stimmen muss. Dieses Verhalten ist absicht, da die Entwickler davon ausgehen, dass, wenn man OOP einsetzt, häufig Speicher angefordert und wieder freigegeben wird. Damit der Speichermanager jetzt nicht jedesmal Speicher von Windows anfordern muss, weil das nicht sehr performant ist, gibt er den freigegebene Speicher nicht gleich an Windows zurück, um in später noch mal nutzen zu können. Mit alternativen Speichermanagern kann man dieses Verhalten allerdings teilweise wohl beeinflussen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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