AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Memory Leak durch Thread?

Ein Thema von iphi · begonnen am 26. Okt 2009 · letzter Beitrag vom 27. Okt 2009
Antwort Antwort
Seite 1 von 3  1 23      
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#1

Memory Leak durch Thread?

  Alt 26. Okt 2009, 13:08
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Memory leak?

  Alt 26. Okt 2009, 13:22
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Aussagekräftiger Titel

  Alt 26. Okt 2009, 13:25
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

Re: Memory leak?

  Alt 26. Okt 2009, 13:28
setze alle dynamischen Objekte in Capture auf Länge 0. das kann alles mögliche bedeuten
und meine 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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#5

Re: Memory Leak durch Thread?

  Alt 26. Okt 2009, 19:29
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Memory Leak durch Thread?

  Alt 26. Okt 2009, 19:31
Was legst du in den dynamischen Strukturen ab?
Markus Kinzler
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#7

Re: Memory Leak durch Thread?

  Alt 26. Okt 2009, 19:35
Zitat:
Was legst du in den dynamischen Strukturen ab?
Datenblöcke vom Audiodatenstrom.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Memory Leak durch Thread?

  Alt 26. Okt 2009, 19:37
Das SetLength() löscht zwar das dynamische Array aber nicht die TCapture(?) Strukturen, die darin verwaltet werden.
Markus Kinzler
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#9

Re: Memory Leak durch Thread?

  Alt 26. Okt 2009, 19:42
Meine dynamischen Felder enthalten nur Chars, keine Strukturen.

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

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Memory Leak durch Thread?

  Alt 26. Okt 2009, 20:42
Guten Abend,

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

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:51 Uhr.
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