Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Fehler beim Auflösen und Freigeben eines dynamischen Tree's

  Alt 11. Mär 2012, 08:13
Oder mit Referenzzählung.

Referenzzählung = Beim Anlegen und darauf verweisen wird der Zähler erhöht. Beim Entfernen eines 'Childs' wird der Zähler des Parents erniedrigt. Wenn der Zähler bei 0 ist, ist der Knoten nicht mehr in Verwendung => Löschen => Rekursiver Aufruf.

Oder gleich mit Interfaces arbeiten, die haben das nämlich eingebaut.

Bei 4 Mio Knoten würde ich allerdings alle Knoten von Anfang an in einer Liste verwalten (TObjectList). Im Konstruktor und Destruktor eines Knotens baust Du einfach eine einzige Zeile ein:
Delphi-Quellcode:
Constructor TMyNode.Create;
Begin
  ...
  ListOfNodes.Add(Self);
End;

Destructor TMyNode.Destroy;
Begin
  ...
  ListOfNodes.Remove(Self);
End;

Class Procedure TMyNode.KillAllNodes;
Begin
  ListOfNodes.Clear;
End;

initialization
  ListOfNodes := TObjectList.Create(True);
finalization
  KillAllNodes; // Hier eigentlich überflüssig, aber anschaulich.
  ListOfNodes.Free
End.
Leider ist die TObjectList nicht sonderlich schnell, sodaß eine Dictionary hier sicherlich besser geeignet wäre.
  Mit Zitat antworten Zitat