Einzelnen Beitrag anzeigen

Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#5

Re: TreeView Data freigeben, so ?

  Alt 28. Feb 2005, 22:01
Hallo,

stell mal etwas mehr Code rein.
Delphi-Quellcode:
//Stringliste erstellen,füllen
function TForm1.TVKnotenData(aNode: TTreeNode) : TStringList;
var s : string;
begin
  Result := TStringList.Create;
  Result.Add(aNode.Text);
  Result.Add(CheckListBox3.Items[CheckListBox3.ItemIndex]);
  Result.Add(Edit1.Text);
end;

//Stringliste verbinden
procedure TForm1.SetTVKnotenData;
begin
  TreeView1.Selected.Data := TVKnotenData(aNode);
end;

//Data freigeben Version 1 *********************************
procedure TForm1.TV1DataFree;
var i : Integer;
begin
  if TreeView1.Items.Count 0 then
    for i := 0 to TreeView1.Items.Count-1 do
      if TreeView1.Items.Item[i].Data <> nil then
        begin
        Dispose(TreeView1.Items.Item[i].Data); //Dispose(...)
        TreeView1.Items.Item[i].Data := nil;
        end;
end;

//Data freigeben Version 2 ***********************************
procedure TForm1.TV1DataFree;
var i : Integer;
begin
  if TreeView1.Items.Count 0 then
    for i := 0 to TreeView1.Items.Count-1 do
      if TreeView1.Items.Item[i].Data <> nil then
        begin
        TStrings(TreeView1.Items.Item[i].Data).Free; //TStrings(...).Free
        // ... := nil entfernt
        end;
end;

//Data freigeben Version 3 ***********************************
procedure TForm1.TV1DataFree;
var i : Integer;
begin
  if TreeView1.Items.Count 0 then
    for i := TreeView1.Items.Count-1 downto 0 do //downto
      if TreeView1.Items.Item[i].Data <> nil then
        begin
        TStrings(TreeView1.Items.Item[i].Data).Free;
        // ... := nil entfernt
        end;
end;
Alle 3 Versionen laufen ohne Fehler und geben auch den Speicher frei.

Bei einer größeren Anzahl von Knoten(>1000) mit .Data wird
die Schleife zur Speicherfreigabe zum Ende immmer langsamer.
(ist unabhängig von der Größe der verbundenen Stringlisten)
Mit einer downto-Schleife (Version3) dreht sich das Verhalten um.
Warum vermindert sich die Geschwindigkeit?

Hat jemand eine Idee die Speicherfreigabe schneller zu machen ?
Würde mich freuen

MfG
Lannes
  Mit Zitat antworten Zitat