AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi zuwenig Arbeitsspeicher - mit Try Excepition abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

zuwenig Arbeitsspeicher - mit Try Excepition abfangen

Ein Thema von Ines · begonnen am 15. Jul 2009 · letzter Beitrag vom 16. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Ines

Registriert seit: 22. Aug 2006
Ort: Augsburg
96 Beiträge
 
Delphi 2009 Enterprise
 
#1

zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 15. Jul 2009, 09:51
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
Ines
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 15. Jul 2009, 10:15
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 15. Jul 2009, 10:51
Zitat von Ines:
Mein Programm bricht sporadisch mit dem Fehler "zu wenig Arbeitsspeicher" ab.
Sei stark und setzt dich erstmal hin, trink ein Glas Wasser ud atme mal tief durch, denn jetzt kommt die bittere Wahrheit: Wahrscheinlich hast du ein ziemliches Speicherleck in deiner Anwendung. Es gibt Bibliotgheken, wie Fastmem mit denen man diese aufspüren kann. Grundsätzlich sollte man jedes Objekt, was man erzeugt hat wieder freigeben und auch jede sonstige Speicherplatzanforderung mit GetMem zum Beispiel.

Zitat:
Da ich an meinem Arbeitsplatz diesen Fehler nicht nachvollziehen kann,
Ja das sind die schönsten Fehler. Aber guck mal, obn sich die Rechner überhaupt groß unterscheiden. Wichtig wäre der vorhandene Arbeitsspeicher, die Anzahl der laufenden Prozesse zum Zeitpunkt des Absturzes und natürlcih welches Windows jeweils läuft.

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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Ines

Registriert seit: 22. Aug 2006
Ort: Augsburg
96 Beiträge
 
Delphi 2009 Enterprise
 
#4

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 15. Jul 2009, 11:25
Hallo Luckie,

ich hab' den Fehler schon bei mir (und meinem Programm gesucht)!
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.
Ines
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 15. Jul 2009, 11:29
Zitat von Ines:
ich hab' den Fehler schon bei mir (und meinem Programm gesucht)!
ReportMemoryLeaksOnShutdown bringt jetzt (nach Beheben der angezeigten Probleme) keine Anzeige mehr - damit sollten doch dann alle Speicherlecks ausgemerzt sein, oder?
Zumindest besteht Hoffnung.

Zitat:
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?
Diese Unterschiede sollte bei deinem Problem keine Rolle spielen. Monitore werden eigentlich akls Arbeitsspeicher genutzt.

Zitat:
Wenn Du noch eine Idee hast - laß' es mich bitte wissen - bin für alles dankbar.
Du kannst das Programm mal eine Weile laufen lassen und dabei den Speicherverbrauch im Taskmanager beobachten. Ist zwar nicht sehr genau, aber bei größeren Speicherlecks sollte es reichen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#6

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 15. Jul 2009, 11:46
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#7

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 15. Jul 2009, 12:12
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.
Peter Schaible
  Mit Zitat antworten Zitat
Ines

Registriert seit: 22. Aug 2006
Ort: Augsburg
96 Beiträge
 
Delphi 2009 Enterprise
 
#8

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 16. Jul 2009, 13:04
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
Ines
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 16. Jul 2009, 13:22
Hallo Ines,

vielleicht kanst Du ja mit der Hilfe von FastMM4 das Speicherleck finden.
In der mitgelieferten .inc Datei lassen sich diverse Optionen einstellen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: zuwenig Arbeitsspeicher - mit Try Excepition abfangen

  Alt 16. Jul 2009, 14:40
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:39 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