![]() |
Systemressourcen erschöpft
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich habe eine komplexe Anwendung geschrieben ( ![]() Im Moment gebe ich damit testweise ältere umfangreiche Turnierdaten eines großen Mannschaftsturniers ein und erhalte neuerdings immer wieder die Meldung "Systemressourcen erschöpft". Kann mir jemand bei einem Lösungsansatz helfen? Im Moment habe ich noch keine wirkliche Idee woran das liegen kann :-( Die Anzahl der Handels schwankt immer etwas und war auch schon höher als zum Zeitpunkt der Fehlermeldung. Evtl. hat das Problem auch mit einer Speicherfunktion auf die Festplatte zu tun... Anbei zwei Screenshots des Systemmonitors. Kann mir jemand einen Tip geben? Muss ich erzeugte Komponenten auf verdeckten Registerseiten oder nicht benötigte Formulare gleich wieder auflösen? Danke Stahli |
Re: Systemressourcen erschöpft
Gibst du auchnicht mehr bentugte Objekte auch wieder frei? Dies gilt auf für GDI Ressourcen.
|
Re: Systemressourcen erschöpft
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, das kann ich schwer beantworten...
Ein Turnierprojekt ist so etwas ähnliches wie eine DFM. Die TUR-Datei wird geladen und die (massenweise) enthaltenen Datenkomponenten werden erzeugt und geladen. Dann gibt es verschiedene sichtbare Komponenten, z.B. Designer und Listen, denen die Datenkomponenten zugewiesen werden. Diese erzeugen dann eine passende Anzahl sichbarer Komponenten, die die Daten anzeigen (siehe z.B. Spielerlisten im Bild). Werden die Daten aufgelöst, werden auch "automatisch" die sichtbaren Komponenten entfernt. Das findet aber nicht statt, solange ich nur ein anderes Register oder Unterformular auswähle. Wenn die Anzahl der gleichzeitig erzeugten Komponenten das Problem sein sollt könnte ich vielleicht wenigstens nicht gebrauchte Unterformulare auflösen oder Inhalte von ausgeblendeten Registern löschen... Aber erst einmal würde ich gern genau wissen, wo das Problem genau steckt und wie ich eine "drohende Ressourcenüberschreitung" vielleicht vorher erkennen kann... -> "Bitte schnell alles speichern, gleich knallts!" - oder so :-( Und GDI-Ressourcen kann ich im Moment noch nicht recht einordnen. Ach so, jeder Spieler verwaltet aicuh noch ein Bitmap. Dannke schon mal! |
Re: Systemressourcen erschöpft
Zitat:
Hast Du schon mal FastMM (oder ähnliche Speicher-Profiler) mitlaufen lassen? Anhand deren Log kann man recht gut herausfinden, wo was nicht freigegeben wird. |
Re: Systemressourcen erschöpft
Nein, da habe ich mich noch nicht heran getraut.
Aber da muss ich dann wohl mal durch und sehen, ob ich damit zurecht komme... |
Re: Systemressourcen erschöpft
Zitat:
Mfg Net7 |
Re: Systemressourcen erschöpft
Zitat:
Delphi-Quellcode:
Falls eine große Zahl nicht freigegebener Objekte angezeigt wird, kann man anhand der angezeigten Klassennamen versuchen, die Ursachen zu finden. Für detailliertere Fehlerprotokolle kann man FastMM4 direkt einbinden und die Codestellen automatisch auflisten lassen, an denen Objekte erzeugt wurden, die nicht freigegeben werden.
{$WARN SYMBOL_PLATFORM OFF}
ReportMemoryLeaksOnShutDown := DebugHook <> 0; {$WARN SYMBOL_PLATFORM ON} |
Re: Systemressourcen erschöpft
Liste der Anhänge anzeigen (Anzahl: 1)
@Net7:
Die Daten sind vorwiegend als Eigenschaften in Objekten enthalten. @mjustin: Danke! D2006 bringt da ja schon einen eigenen Ansatz mit (siehe Bild). Ich hätte nicht gedacht, dass mein Problem doch selbst gemacht ist - muss erst mal aufräumen! Zumindest ist ein Lösung in Aussicht :-) Verstehe ich das richtig, dass FastMM oder EurekaLog dann darüber hinaus "nur" helfen, die Stelle im Quelltext leichter zu finden? Danke schon mal für die GRO?E Hilfe! Stahli |
Re: Systemressourcen erschöpft
Systemressourcen sind aber kein Speicher (im MemoryManager),
aber die ganzen GDI-Objecte, welche z.B. in einem TBitMap gekapselt sind schon. Wobei ~780 Bilder doch eigentlich nicht viel sind (dürften doch nicht viel mehr als 800 bis 4000 GDI-Objecte drin stecken :gruebel: und ich dachte soviel bekommt windows noch locker hin) |
Re: Systemressourcen erschöpft
Zitat:
Zitat:
Aber das siehst du ja vielleicht auch selbst bei dir. Entscheidend könnte z.B. sein, wenn du TBitmap castest um es irgendwo als Pointer zu speichern. Denn dabei geht ggf. der Referenzzähler flöten und es wird nicht mehr aufgeräumt. Das wären neben den Standardfehlern weitere Fallstricke. // EDIT: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 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 by Thomas Breitkreuz