AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Geschwindigkeit einer Rekursion unter D2010 erhöhen
Thema durchsuchen
Ansicht
Themen-Optionen

Geschwindigkeit einer Rekursion unter D2010 erhöhen

Offene Frage von "kaju74"
Ein Thema von kaju74 · begonnen am 10. Mär 2010 · letzter Beitrag vom 10. Mär 2010
Antwort Antwort
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#1

Re: Geschwindigkeit einer Rekursion unter D2010 erhöhen

  Alt 10. Mär 2010, 10:29
Die eigentliche Frage
Zitat:
Was kann ich tun, um trotzdem CarriageReturn/Linefeeds und Spaces in meiner Ausgabe zu erhalten, ohne das die
Geschwindigkeit wieder zusammenbricht?
kann ich leider auch nicht beantworten. Ich finde diese Erscheinung auch erstmal erstaunlich. Ist die Compiler-Option "String-Formatprüfung" eingeschaltet? Wie ist es, wenn Du nur "Idnt: '';" setzt, aber CrLF=#13#10 lässt? Mir fällt eigentlich nur auf, dass der Compiler bei der Sequenz:
Result := Expand(Result + CrLf, Indent + Idnt, Elements[i].Elements) + Indent; mit CrLf='' und Idnt='' keine temporären Strings für "Result + CrLf" und "Indent + Idnt" erstellen muss. Da auch Indent dann leer bleibt, reduziert sich der Aufruf dann in der Konsequenz auf
Result := Expand(Result, '', Elements[i].Elements)); Hier würde ich vielleicht ansetzten. Ich hoffe, ich habe keinen fürchterlichen Denkfehler gemacht, aber geht es auch so???
Delphi-Quellcode:
  procedure Expand(const Indent: string; const Elements: TXmlElements);
  var
    i: Integer;
    Content: string;
    SmartEnd: Boolean;
  begin
    for i := 0 to Elements.Count - 1 do
    begin
      Result := Result + Indent + '<' + Elements[i].Name;
      Content := Trim(Elements[i].Content);
      SmartEnd := not((Content <> '') or (Elements[i].Elements.Count > 0));
      if not(SmartEnd) then
        Result := Result + '>' + Content;
      if Elements[i].Elements.Count > 0 then
      begin
        Result := Result + CrLf;
        Expand(Indent + Idnt, Elements[i].Elements) + Indent;
      end;
      if not(SmartEnd) then
        Result := Result + '</' + Elements[i].Name + '>'
      else
        Result := Result + '/>';
      Result := Result + CrLf;
    end;
  end;
Falls ich mir das korrekt überlegt haben sollte, würde man ziemlich oft das Kopieren des Result-Strings vermeiden.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz