![]() |
Re: Problem mit Speicher und Handle
Es empfiehlt sich der Einsatz eines Leak-Reporters, wie FastMM oder MemCheck mit den entsprechenden Einstellungen, der dir nach Beenden deiner Anwendung die meisten Leaks zeigt.
|
Re: Problem mit Speicher und Handle
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Armin,
danke für Deinen Hinweis! Hat mir gerade sehr gehofen. Von mir noch eine Anmerkung: Ich habe Datenobjekte erstellt, die grötenteils aus mehreren Panels und Labels bestehen und Datenbankinhalte darstellen. Darüber hinaus gibt es Listenobjekte (von der Scrollbox abgeleitet), die Mengen von Datenkomponenten anzeigen und in Spalten und/oder Zeilen anordnen. Die Listenobjekte können auch ihre eigene Größe anpassen, um den Inhalt möglichst komplett anzuzeigen. Jeder Eintrag in einer Listenkomponente kann selbst wieder Datenmengen anzeigen und seine Größe selbst danach ausrichten. (Im Bild werden die Runden untereinander angeordnet und beinhalten wiederum Spiele, die dann in Spalten und notfalls in mehreren Zeilen angeordnet werden.) Da sind natürlich jede Menge Objekte verbraten und die Ausrichtung aller Datenkomponenten dauert etwas. Nun hatte ich immer mal sporadisch den o.g. Handle-Fehler. Dank Deinem Hinweis bin ich dem etwas näher auf die Schliche gekommen: Wenn der Aufbau der Runden (im Bild) fertig war (Benutzerobjekte=2500), konnte ich "vorsichtig" durch die Runden scrollen. Das heisst, "Stück für Stück" - ein Stückchen scrollen, dann alles schön fertig zeichnen lassen, wieder ein Stückchen scrollen... Soweit kein Problem. Wenn ich aber die Scrollbar voll "durchgezogen" habe, wurde alles normal gezeichnet, die Benutzerobjekte stiegen danach aber kontinuierlich immer weiter bis 10.000 und dann kam der Fehler. Ich habe mir jetzt so beholfen, dass ich in der Listenkomponente (wenn eine verschachtelte Höhenanpassung erfolgen muss) jeden neuen Eintrag sofort zeichnen lasse.
Delphi-Quellcode:
Das hat zwar zur Folge, dass der Aufbau einer neuen Listenkomponente (bzw. neuen Inhalten) etwas unruhiger ist, aber der Fehler wird so vermieden.
if (ItemCreateFlag) and (ItemsAutoHeight or ItemsAutoWidth) then
begin ScrollInView(dcPanel); Application.ProcessMessages; // nur dieses allein half nicht end; Scheinbar verzettelt sich Windows, wenn wenn es später Komponenten darstellen soll, mit denen es sich noch nicht richtig auskennt ;-) Zwei Fragen: 1) Kann man die Anzahl der verbrauchten Benutzerobjekte im eigenen Programm ermitteln? 2) Hat jemand eine Idee für eine bessere Alternative zu dem ScrollInView? Stahli |
Re: Problem mit Speicher und Handle
Grüß dich :) Pro Frage einen Thread. Deine Fragen haben ja nicht direkt etwas mit meiner zu tun. Hätte ich nicht durch Zufall den Thread geöffnet hätte ich deine Frage nie gefunden :zwinker:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 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