Hallo zusammen
ich hab mich dann mal aufgemacht und quickndirty versucht heraus zu bekommen was es in der Praxis bring:
Zitat:
---------------------
2063 1.lauf
---------------------
2000 2.lauf
Delphi-Quellcode:
function StrReplaceChar(const S: Ansistring; const Source, Replace: AnsiChar): AnsiString;
var
I: Integer;
p : PAnsiChar;
begin
Result := S;
UniqueString(Result);
p := PAnsiChar(Result);
for I := Length(S)-1 downto 0 do
begin
if p^ = Source then
p^ := Replace;
Inc(p);
end;
end;
function StrReplaceChar_(const S: Ansistring; const Source, Replace: AnsiChar): AnsiString;
var
I: Integer;
begin
Result := S;
UniqueString(Result);
for I := Length(S)-1 downto 0 do
if result[i] = Source then
result[i] := Replace;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j : integer;
start1,
start2,
end1,
end2 : integer;
ts : string;
begin
setlength(ts,4096*1024);
fillchar(ts[1],length(ts),#32);
for i:=1 to 4096 do
if i mod 13 =0 then ts[i]:=#0;
start1:=gettickcount;
for j:=0 to 255 do
StrReplaceChar(ts,#0,'A');
end1:=gettickcount;
{---------------------------------------------}
fillchar(ts[1],length(ts),#32);
for i:=1 to 4096 do
if i mod 13 =0 then ts[i]:=#0;
start2:=gettickcount;
for j:=0 to 255 do
StrReplaceChar_(ts,#0,'A');
end2:=gettickcount;
memo1.lines.add('---------------------');
memo1.lines.add(inttostr(end1-start1)+' 1.lauf');
memo1.lines.add('---------------------');
memo1.lines.add(inttostr(end2-start2)+' 2.lauf');
end;
Ja ich weiß, Zeitmessung mit tickcount sind alles andere als genau, (ich hab die bessere Funktion nicht mehr gefunden) aber da der Fehler bei beiden Versionen auftritt ignorier ich ihn einfach.
Irgendwie drängt sich mir der Schluß auf, daß beide Varianten gleich schnell sind.
Gruß
K-H