Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memory Leak durch Thread? (https://www.delphipraxis.net/142330-memory-leak-durch-thread.html)

iphi 26. Okt 2009 12:08


Memory Leak durch Thread?
 
Hallo,

ich glaube, ich habe ein Memoryleak programmiert und ich weiß nicht warum.

Ich habe ein Threadobjekt, welches vom Haupt-VCL Programm erzeugt und gestartet, beendet und wieder vernichtet wird.

Nach Vernichtung des Threadobjekts zeigt der Taskmanager für mein Programm mehr Speicherverbrauch an als vor der Erzeugung.

Hier der prinzipielle Ablauf:

Delphi-Quellcode:
Capture := TCapture.Create(false);
...warte auf ein Ereignis, dann
Capture.Terminate;
setze alle dynamischen Objekte in Capture auf Länge 0.
Capture.Destroy;
Das Ganze lässt sich auch wiederholen. Nach jedem Threadlauf wächst der Speicherbedarf weiter an.

Hat jemand nen Tipp für mich?

Gruß, Thomas

sirius 26. Okt 2009 12:22

Re: Memory leak?
 
1. Man ruft Free anstatt Destroy auf. Dürfte aber nicht viel ändern.
2. Der Taskmanager ist erstens ungenau und zweitens weis der eh nicht, was gerade dein Speichermanager macht. Dein Speichermanager reserviert mal schnell einen 4kB Block auch wenn du nur ein Byte brauchst und gibt den Block erst am Ende des Programms wieder frei (er ist besser organisiert, als es jetzt klingt).
3. Versuche deswegen mal bei deinem Speichermanager nachzufragen (getHeapStatus) oder nutze FastMM der deinen Speicher überwacht. Wenn du dann immer noch Speicherlöcher findest, dann erst tiefer ins Programm schauen.

Luckie 26. Okt 2009 12:25

Aussagekräftiger Titel
 
Bitte gib deinem Beitrag einen aussagekräftigen Titel. Der jetzige Titel lässt nicht erkennen, um was für ein Problem oder Frage es sich handelt. Um den Titel zu ändern, editiere einfach deinen ersten Beitrag. Damit erleichterst du das Auffinden deines Beitrages mit der Suche und ersparst anderen Mitglieder ein unnötiges Öffnen deines Beitrages.

himitsu 26. Okt 2009 12:28

Re: Memory leak?
 
Delphi-Quellcode:
setze alle dynamischen Objekte in Capture auf Länge 0.
das kann alles mögliche bedeuten
und meine :glaskugel: sagt: so hab ich keinen Tipp

das mit dem Destroy steht sogar in der OH drinnen
meine OH sagt (TObject.Destroy)
Rufen Sie Destroy nicht direkt auf. Verwenden Sie stattdessen Free. Die Methode Free überprüft, ob die Objekt-Referenz nicht bereits nil ist und ruft Destroy nur bei Bedarf auf.

iphi 26. Okt 2009 18:29

Re: Memory Leak durch Thread?
 
Zitat:

setze alle dynamischen Objekte in Capture auf Länge 0.

das kann alles mögliche bedeuten
Ich benutze im Thread ein paar dynamische Felder, die ich zum Schluss mit setlength(...,0) wieder auf Länge Null schrumpfe.

Ich habe definitiv ein Speicherleck. Jeder Threaddurchlauf erhöht das Prozessmemory um 8k, mit GetProcessMemoryInfo im Programm verifiziert.

Hat jemand nen Tipp, wie man den Übeltäter strategisch einkreisen könnte?

mkinzler 26. Okt 2009 18:31

Re: Memory Leak durch Thread?
 
Was legst du in den dynamischen Strukturen ab?

iphi 26. Okt 2009 18:35

Re: Memory Leak durch Thread?
 
Zitat:

Was legst du in den dynamischen Strukturen ab?
Datenblöcke vom Audiodatenstrom.

mkinzler 26. Okt 2009 18:37

Re: Memory Leak durch Thread?
 
Das SetLength() löscht zwar das dynamische Array aber nicht die TCapture(?) Strukturen, die darin verwaltet werden.

iphi 26. Okt 2009 18:42

Re: Memory Leak durch Thread?
 
Meine dynamischen Felder enthalten nur Chars, keine Strukturen.

Die TCapture-Thread-Struktur sollte doch eigentlich mit Capture.Free gelöscht werden.???

Klaus01 26. Okt 2009 19:42

Re: Memory Leak durch Thread?
 
Guten Abend,

hast Du schon FastMM4 eingebunden um zu sehen
ob Du wirklich ein Leck hast.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Seite 1 von 3  1 23      

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