AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi MemoryLeak bei Frame und TComboBox.Items.AddObject()
Thema durchsuchen
Ansicht
Themen-Optionen

MemoryLeak bei Frame und TComboBox.Items.AddObject()

Ein Thema von Aviator · begonnen am 30. Nov 2020 · letzter Beitrag vom 1. Dez 2020
Antwort Antwort
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 30. Nov 2020, 17:24
Moin,

ja, ich kann mit Delphi 10.2 das Speicherleck nachvollziehen.

Ich habe dann mal den Create mit Application statt Self ausgeführt, also
  FMainFrame := TFrame1.Create(Application); und es gibt kein Speicherleck mehr.

LG aus dem hohen Norden, Edmund
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 30. Nov 2020, 17:26
Moin,

ja, ich kann mit Delphi 10.2 das Speicherleck nachvollziehen.

Ich habe dann mal den Create mit Application statt Self ausgeführt, also
  FMainFrame := TFrame1.Create(Application); und es gibt kein Speicherleck mehr.

LG aus dem hohen Norden, Edmund
Danke für den Test.

Aber das sollte ja denke ich nicht die Lösung sein. Es müsste ja möglich sein, dass ich eine Form oder gar ein Panel oder whatever als Owner für das Frame angeben kann, ohne das ich hunderte Memory Leaks bekomme.
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 30. Nov 2020, 17:36
Als Lösung würde ich das auch nicht bezeichnen, eher als Würgaround.

Klar sollte der Eigentümer des Frames ein Form oder ein Control á la TPanel sein und nicht die Applikation selbst. Ich hab' schon seit einiger Zeit nichts mehr mit Frames gemacht, kann mich aber aus D7-Zeiten noch daran erinnern, dass die Dinger sich oft irgendwie komisch verhalten haben

LG aus dem hohen Norden, Edmund
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 30. Nov 2020, 20:04
Zitat:
Ein OnCreate() und OnDestroy() gibt es bei Frames ja leider nicht. Ich muss das Frame aber dynamisch erzeugen und es mit Werten füllen.
Dann aber mit override.
Am Speicherleck ändert es aber nichts. Beim Aufruf des Create über einen Vorfahrentypen würde dann die ComboBox einfach leer sein weil dem Vorfahren dein Create nicht bekannt ist über dessen "virtual". (z.B. wenn der Frame im Formdesigner auf die Form gepappt und in der DFM gespeichert wurde)

Haltepunkt in TFrame1.Destroy und schauen ob das Event aufgerufen wird und wenn ja, ob dort die Items der Combobox "noch" gefüllt sind.

Alternative:
Delphi-Quellcode:
  TTestObject = class(TComponent)
  ...

  TestObject := TTestObject.Create(cbb1); // oder self oder wo immer es passt
  TestObject.TestProperty := 'Item 1';
  cbb1.Items.AddObject('Item 1', TestObject);

  // und das Free im Destroy kann entfallen
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Nov 2020 um 20:07 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 30. Nov 2020, 20:09
Danke für deine Anteilnahme himitsu, aber du solltest meinen ersten Beitrag und auch die nachfolgenden Posts lesen. Dann wirst du merken, dass deine Vorschläge so alle nicht umsetzbar sind bzw. alles schon so durchgeführt wurde.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 30. Nov 2020, 20:27
Wie gesagt:
Zitat:
Haltepunkt in TFrame1.Destroy und schauen ob das Event aufgerufen wird und wenn ja, ob dort die Items der Combobox "noch" gefüllt sind.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: MemoryLeak bei Frame und TComboBox.Items.AddObject()

  Alt 30. Nov 2020, 21:36
Wie gesagt:
Zitat:
Haltepunkt in TFrame1.Destroy und schauen ob das Event aufgerufen wird und wenn ja, ob dort die Items der Combobox "noch" gefüllt sind.
Wie gesagt ... lies bitte meinen Post komplett und auch die der anderen Mitglieder ...
Post.jpg
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:11 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