Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Verwendeter Arbeitsspeicher wird immer mehr... (https://www.delphipraxis.net/135930-verwendeter-arbeitsspeicher-wird-immer-mehr.html)

DarkLink 20. Jun 2009 11:19


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

Mithrandir 20. Jun 2009 11:24

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..

DarkLink 20. Jun 2009 11:27

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:

Dunkel 20. Jun 2009 11:44

Re: Verwendeter Arbeitsspeicher wird immer mehr...
 
Zitat:

Zitat von DarkLink
{...} und dann mit Destroy wieder zerstöre.

btw. gibt man Objekte mit .Free oder FreeAndNil() frei. Der Destructor sollte nie explizit aufgerufen werden.

hoika 20. Jun 2009 11:44

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

DarkLink 20. Jun 2009 12:08

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:

hoika 20. Jun 2009 12:13

Re: Verwendeter Arbeitsspeicher wird immer mehr...
 
Hallo,

Zitat:

Ich habe jetzt mal fastmm4 benutzt, dennoch wird mein Programm immernoch stetig größer, und bei mir wird nicht eine Warnung angezeigt.
Wie hast du fastmm4 konfiguriert, dass es nach Lecks suchen soll ?

Mache doch einfach mal.
Schreibe in InitBitmap doch mal

Delphi-Quellcode:
  Bild := TBitmap.Create;
  Bild := TBitmap.Create;
also auf jeden Fall ein Leck rein.
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

DarkLink 20. Jun 2009 12:51

Re: Verwendeter Arbeitsspeicher wird immer mehr...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Zitat:

Zitat von hoika
Wie hast du fastmm4 konfiguriert, dass es nach Lecks suchen soll ?

Habe es zuerst nicht so richtig verstanden, wie fastmm genau funktioniert. Auf jeden fall habe ich jetzt Memory Leaks gefunden, jedoch weiß ich mit der Aussage wer die Leaks verursacht nicht viel anzufangen.

Zitat:

Zitat von hoika
hänge das Projekt mit deinem Änderungen noch mal an
das erste Posting an.

Hab ich gemacht. :coder:

Zitat:

Zitat von hoika
Schon mal mit memcheck probiert.
Finde ich einfacher.

Funkioniert aber leider unter Delphi 2009 nicht mehr. :(

Zitat:

Zitat von hoika
Zum Destroy -> Free
Du hast hoffentlich alle deine Destroys ersetzt ?
(Keyboard.Destroy ... lungert hier auch noch rum)

Hab ich gemacht, siehe neue Version.

Zitat:

Zitat von hoika
Ausserdem rufst du im ResumeSuspend FormCreate auf, warum ?
Das erzeugt wieder eine Bitmap.

Das war noch ein überbleibsel aus der alten Version die ich erwähnte, hab die Funktion einfach von dort kopiert, ohne nochmal genauer drüber zu schauen. Danke für den Hinweis. :-D

Zitat:

Zitat von hoika
Mache mal deinen Code etwas übersichtlicher
(mehr Methoden).

Ich weiß, das ist eine meiner großen schwächen, den Code übersichtlich zu gestalten. Nur meistens ist das kein Problem, da der Code nur für mich bestimmt ist... :stupid:

Gruß
Michael

hoika 20. Jun 2009 14:12

Re: Verwendeter Arbeitsspeicher wird immer mehr...
 
Hallo,

Zitat:

jedoch weiß ich mit der Aussage wer die Leaks verursacht nicht viel anzufangen.
In deinem jpg steht doch genau drin,
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

hoika 20. Jun 2009 14:24

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 01:08 Uhr.
Seite 1 von 2  1 2      

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