![]() |
Verwendeter Arbeitsspeicher wird immer mehr...
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich hoffe meine Frage ist im richtig Forum. :wink: Ich habe folgendes Problem: Ich habe ein Programm geschrieben, welches mir auf dem Display meiner Logitech G15 Tastatur verschiedene Werte, wie Uhrzeit, Uptime, etc. anzeigt. Das Funktioniert auch alles soweit ganz gut, bis auf einen kleinen Haken. Das Programm belegt nach einiger Zeit meinen kompletten Arbeitsspeicher. Man kann den Anstieg ist im Task Manager mit ansehen, obwohl es nur wenige kB pro Sekunde sind, aber wie sagt man so schön "Kleinvieh macht auch Mist". Das Interessante an der ganzen Sache ist, dass dieses Phänomen nur dann auftritt, wenn ich die Anwendung ohne Debugger starte, also ausserhalb der IDE. Wenn der Programmaufruf aus der IDE erfolgt, bleibt die Speichernutzung bei angenehmen 1280 kB. Um die Ausgabe zu erzeugen, habe ich mir eine Bitmap-Variable angelegt, welche ich durch einen Timer jede Sekunde, zuerst mit Bitmap.Create initialisiere, dann mit den Canvas Methoden bearbeite, anschließend auf das Display übertrage und dann mit Destroy wieder zerstöre. Ich hatte mir jetzt also gedacht, dass das Programm die gleiche Variable immer wieder neu belegt und anschließend wieder leert und somit nicht immer mehr Speicher frisst, sondern den verwendeten wieder frei gibt, oder ist das mein Denkfehler ? :gruebel: Falls mal jemand über den Quellcode schauen will, habe ich ihn mal in den Anhang meines Postings gesteckt. Ich hoffe ihr könnt mir weiterhelfen. :) Gruß Michael |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Was spricht denn dagegen, das Bitmap am Start der Anwendung zu Erstellen, dann immer wieder da Canvas zu beschreiben, und anschließend bei programmende alles wieder frei zu geben?
Eventuell hilft das ja.. |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Erstmal danke für die schnelle Antwort.
Zuerst hatte ich das auch so... nur da hatte ich das mit dem Speicherproblem genauso. Deswegen bin ich ja erst auf die Idee gekommen das Bitmap immer wieder neu zu initialisieren. EDIT: OK, ich muss mich entschuldigen... :oops: Das mit dem immer wieder neu zeichnen hatte ich in einer alten Version meines Programms gemacht, da war es dann wohl etwas anderes, das dafür gesorgt hat, dass der Speicher volläuft. Um es kurz zu fassen, wenn ich es so mache läuft es.... vielen vielen Danke. :-D EDIT2: Gut, zu früh gefreut. Der Speicher nimmt immernoch zu... :wall: |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Zitat:
|
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Hallo,
benutze memcheck oder fastmm4. Ausserdem sind ein paar Warnungen im Programm. Die würde ich zuerst mal beheben. Update: Ist lcdg15.pas von dir ? Ersetze mal Bildschirm.Destroy; durch Bildschirm.Free, und zwar jede Stelle ! (FormCreate, OnTimer) Ausserdem würde ich try finally benutzen. Heiko |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Ich habe jetzt mal fastmm4 benutzt, dennoch wird mein Programm immernoch stetig größer, und bei mir wird nicht eine Warnung angezeigt.
Nein, lcdg15.pas ist nicht von mir. Das mit dem Destroy habe ich schon geändert, aber immernoch das selbe Problem. Irgendwie versteh ich langsam die Welt nicht mehr... :gruebel: |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Hallo,
Zitat:
Mache doch einfach mal. Schreibe in InitBitmap doch mal
Delphi-Quellcode:
also auf jeden Fall ein Leck rein.
Bild := TBitmap.Create;
Bild := TBitmap.Create; Das muesste er nach Programm-Ende anzeigen hänge das Projekt mit deinem Änderungen noch mal an das erste Posting an. Schon mal mit memcheck probiert. Finde ich einfacher. Zum Destroy -> Free Du hast hoffentlich alle deine Destroys ersetzt ? (Keyboard.Destroy ... lungert hier auch noch rum) Ausserdem rufst du im ResumeSuspend FormCreate auf, warum ? Das erzeugt wieder eine Bitmap. Mache mal deinen Code etwas übersichtlicher (mehr Methoden). Heiko |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Gruß Michael |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Hallo,
Zitat:
was du im fastmm4 definieren sollst ??? FullDebugMode LogMemoryLeakDetailFile Setze das anständig und poste die Datei. In der Inc steht {.$define FullDebugMode} Ändere das in {$define FullDebugMode} usw. Heiko |
Re: Verwendeter Arbeitsspeicher wird immer mehr...
Hallo,
setze mal das Timer-Intervall testweise auf 5000 (5 Sekunden), vielleicht braucht die Timer-Methode mehr als 1 Sekunde ? Ausserdem würde ich mal die globalen Variablen durch lokale ersetzen. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:28 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