Zitat:
Delphi-Quellcode:
Value := Value + c
else
Caption:=Caption + c;
Wieso mit einem Einrad (Einzelzeichenstringmanipulationsoperationen) einen Käfer (Delphi mit TStringList) versuchen zu verfolgen?
Gut, man kann auch einen Ferrari nehmen (Position suchen und alles zusammen machen).
Selbst eine TStringList erzeugen (jedes Mal und nichtmal über ein globales Singleton) und verwenden, erzeugt weniger Speicheroperationen (Get/Free/Realloc), als das da, mit der For-Schleife.
Gerade in Delphi 7 (ohne FastMM) ist dieses Einzelzeichenstringzusammensetzzeugs die totale Bremse.
(zum Glück haben wir seit 2006 standardmäßig ein eigebautes InPlaceRealloc vom Pierre drin, welches solchen Code getwas verbessert, solange die Codeoptimierung aus dem Caption:=Caption+c ein Insert(Caption,C,1) hinbekommt).
Delphi-Quellcode:
(*procedure TTreeNodeDescriptor.FromString(Value: string);
var
i: Integer;
begin
i := Pos(':', Value);
Caption := Trim(Copy(Value, 1, i - 1));
Value := Trim(Copy(Value, i + 1));
Level := Length(Value) - Length(TrimLeft(Value));
end;*)
procedure TTreeNodeDescriptor.FromString(Value: string);
var
i: Integer;
S: string;
begin
i := Pos(':', Value);
S := LeftStr(Value, i - 1);
Caption := TrimLeft(S);
Value := TrimLeft(Copy(Value, i + 1));
Level := Length(S) - Length(Caption);
end;
Gut, man kann das jetzt noch extrem optimieren, indem man die Trims selber berechnet und bei den Copy sofort anwendet, bzw. zum Ausrechnen des Level heranzieht, ohne die String-Zwischenvariable, aber man kann es damit (im Normalfall) auch übertreiben.