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):
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?