AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Speicherleck nach Löschen des Parent???

Ein Thema von pesi · begonnen am 19. Dez 2016 · letzter Beitrag vom 22. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2   
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#1

Speicherleck nach Löschen des Parent???

  Alt 19. Dez 2016, 15:28
Halli Hallo,

ich hätte da mal eine Frage: Ich erzeuge dynamisch TabSheets in einem TPageControl und packe auf die Sheets dann auch Elemente drauf (Memo, Label, etc.) deren Parent natürlich das jeweilige TabSheetX ist.

Muss ich, wenn die diese TabSheets nicht mehr benötige, alle einzelnen Elemente auf dem Sheet löschen oder reicht es mit TabSheet1.Destroy das Parent-Sheet platt zu machen??? Entsteht da irgendwelcher Datenmüll im Speicher?

Danke für Eure Einschätzung.

Gruß
Peter
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Speicherleck nach Löschen des Parent???

  Alt 19. Dez 2016, 15:33
Schau mal bitte hier: http://delphi.about.com/od/adptips20...nilselfapp.htm
Eine englischsprachige Beschreibung zum Thema.
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Speicherleck nach Löschen des Parent???

  Alt 19. Dez 2016, 16:18
Da es in dem Artikel ja eher um Forms geht, hoffe ich, dass ich trotzdem das Wichtigste rausgelesen habe!?!?

"....the form is destroyed automatically when its owner is destroyed"

D.h. dann wohl, dass ich keinen Speichermüll erzeuge - richtig?

Sorry, bin ein eher simples Gemüt (oder nennen wir es "erfahrener Laie")

Danke Dir
Gruß
Peter
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Speicherleck nach Löschen des Parent???

  Alt 19. Dez 2016, 16:24
Richtig- Wenn das Formular zerstört wird, zerstört es auch alle Dinge die ihm "gehören". Darunter auch dein TabSheet.

Ich würde dem TabSheet als Owner das PageControl geben, aber im Endeffekt macht das wohl keinen Unterschied.

Wenn du dich so um Speicherlecks sorgst, setze doch mal die Variable ReportMemoryLeaksOnShutdown auf True und schau selbst
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Speicherleck nach Löschen des Parent???

  Alt 19. Dez 2016, 16:35
Im Artikel steht:
Zitat:
inherit from TControl
Also alles, was davon abgeleitet ist. Erklärt wird am Beispiel eines TForms.

Eigentlich gilt es für alles, was von TComponent abgeleitet wird.

Flappsig fomuliert: Alles, was man irgendwie auf ein Formular pappen kann.

Oder als einfacher Merker:

Sieht der Konstruktor so aus constructor Create(AOwner: TComponent); override; wird das Teil zusammen mit dem angegebenen Owner weggeräumt, sobald der weggeräumt wird.
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Speicherleck nach Löschen des Parent???

  Alt 19. Dez 2016, 17:10
Danke Euch!!!

  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.377 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Speicherleck nach Löschen des Parent???

  Alt 22. Dez 2016, 17:14
Ich würde dem TabSheet als Owner das PageControl geben, aber im Endeffekt macht das wohl keinen Unterschied.
Äh? durchaus macht das einen Unterschied Parent <> Owner
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Speicherleck nach Löschen des Parent???

  Alt 22. Dez 2016, 17:21
Dass Parent und Owner nicht das gleiche ist habe ich verstanden.

Aber was macht das in diesem konkreten Fall für einen Unterschied? Er hat sein PageControl und fügt zur Laufzeit weitere Tabsheets hinzu. Mehr nicht.

Ohne weitere Angaben: Die Tabsheets werden zerstört wenn das Pagecontrol zerstört wird. Das Pagecontrol wird zerstört wenn sein Parent (Formular/Frame) zerstört wird. Also praktisch kein Unterschied.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Speicherleck nach Löschen des Parent???

  Alt 22. Dez 2016, 17:29
Wer aber ein Tabsheet als Parent hat und nicht als Owner, wird beim zerstören des Tabsheets bzw. des PageControls, nicht zerstört.

Wenn ich das hier richtig sehe, müssten die Frames sowohl als Parent, als auch als Owner, das entsprechende Tabsheet bekommen.

Wird das Tabsheet nicht zum Owner, bleibt das Frame beim entfernen des Tabsheet als Speicherloch erhalten
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Speicherleck nach Löschen des Parent???

  Alt 22. Dez 2016, 18:46
Auch der Parent gibt seine untergeordneten Controls frei. Ich weiß nicht, ob das schon immer so war, aber zumindest unter Delphi 7 findet sich in der Controls.pas im Destruktor von TWinControl:
Zitat:
Delphi-Quellcode:
  I := ControlCount;
  while I <> 0 do
  begin
    Instance := Controls[I - 1];
    Remove(Instance);
    Instance.Destroy;
    I := ControlCount;
  end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:20 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