Einzelnen Beitrag anzeigen

skyphab

Registriert seit: 16. Apr 2004
17 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Speicherverwaltung und .Free

  Alt 17. Jun 2004, 08:47
Das mit dem GetHeapStatus ist super, danke!

Damit habe ich jetzt herausgefunden, dass das Freigeben der obersten Objektliste funktioniert.
Wenn in der Objektliste aber ein Objekt angelegt wird, dass wiederum eine Objektliste erzeugt, wird beim clear der 'obersten' Objektliste aber der Speicher der untersten Objektliste nicht freigegeben.

Zur Verdeutlichung (Ich habe den unwichtigen Teil des Codes rausgeschnippelt):

Klasse TAuftraege
Code:
procedure TAuftraege.Auftrag_Hinzufuegen(I_Auftrag: RAuftrag);
begin
  Objektliste.Add(TAuftrag.Create(I_Auftrag));
end;
Klasse TAuftrag
Code:
constructor TAuftrag.Create(I_Auftrag: RAuftrag);
begin
  Auftrag := I_Auftrag;
end;
Bei (In TAuftraege):

Code:
Objektliste.Clear;
und anschließendem neu Anlegen der Objekte, ändert sich der laut GetHeapStatus der zugewiesene Speicher nicht.

Allerdings so (Änderung bei TAuftrag.Create):

Klasse TAuftraege
Code:
procedure TAuftraege.Auftrag_Hinzufuegen(I_Auftrag: RAuftrag);
begin
  Objektliste.Add(TAuftrag.Create(I_Auftrag));
end;
Klasse TAuftrag
Code:
constructor TAuftrag.Create(I_Auftrag: RAuftrag);
begin
  RollenListe := TObjectList.Create(true);
  Auftrag := I_Auftrag;
end;
wird beim Objektliste.Clear und anschließendem Neuanlegen immer mehr Speicher belegt (~100Byte). Also wird wohl die Objektliste 'Rollenliste' nicht korrekt freigegeben. Ich muss nicht mal ein Objekt in diese Liste stellen.

Muss ich in diesem Fall Rollenliste irgendwo freisetzen? Ich habe in destructor TAuftrag.free Rollenliste.Free reingemacht, aber gebracht hat es nichts?
  Mit Zitat antworten Zitat