Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Geschwindigkeit einer Rekursion unter D2010 erhöhen

  Alt 10. Mär 2010, 11:27
vesuch mal Dieses
Delphi-Quellcode:
function TXmlDocument.Content: string;
var
  SL: TStringList;

  procedure Expand(const Indent: string; Elements: TXmlElements);
  var
    i: Integer;
    S: String;
  begin
    for i := 0 to Elements.Count - 1 do
      if Elements[i].Elements.Count > 0 then begin
        SL.Add(Indent + '<' + Elements[i].Name + '>');
        Expand(Indent + ' ', Elements[i].Elements);
        SL.Add(Indent + '</' + Elements[i].Name + '>');
      end else begin
        S := Trim(Elements[i].Content);
        if S <> 'then
          SL.Add(Indent + '<' + Elements[i].Name + '>' + S + '</' + Elements[i].Name + '>')
        else
          SL.Add(Indent + '<' + Elements[i].Name + '/>');
      end
  end;

begin
  SL := TStringList.Create;
  try
    SL.Add('<?xml version="1.0" encoding="utf-8" ?>');
    Expand('', Elements);
    Result := SL.Text;
  finally
    SL.Free;
  end;
end;
Beim Original war nicht nur die große Laufzeit das Schlimme.
Schlecht war auch die Art der Parameter/Speicherverwaltung.
So wurde bei mehrfach verschalteten Nodes ein Vielfaches des Speichers belegt, welches auch noch mit zunehmender Anzahl der ChildNodes anwuchs, da der String über Str mehrfach verwaltet wurde. (welches samso auch schon gut beseitigt hat)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat