Online
Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.054 Beiträge
Delphi 12 Athens
|
Re: schnelleres StringReplace und MultiStringReplace
20. Nov 2009, 16:47
hier nur noch ein kleiner Test dazu
Delphi-Quellcode:
Program Project1;
{$APPTYPE CONSOLE}
Uses Windows, SysUtils, StrRep;
Var C: Integer = 10000;
Var i, i4: Integer;
i2, i3: Int64;
S, S2, S3: String;
T: LongWord;
Begin
C := (C div 1000) * 1000;
WriteLn('baue Teststring zusammen...');
T := GetTickCount;
S := '';
//For i := 0 to C - 1 do
// S := S + StringOfChar(' ', Random(20)) + 'Wort';
{}For i := 0 to C div 1000 - 1 do Begin
{} S2 := '';
{} For i4 := 0 to 1000 - 1 do
{} S2 := S2 + StringOfChar(' ', Random(20)) + 'Wort';
{} S := S + S2;
{}End;
T := GetTickCount - T;
WriteLn(C, ' W”rter, ', Length(S), ' Zeichen, ', T, ' ms');
WriteLn;
WriteLn('StringReplaceX:');
//T := GetTickCount;
{}QueryPerformanceCounter(i2); // GetTickCount ist zu langsam X'D
S2 := StringReplaceX(S, 'Wort', 'xxx', [rfReplaceAll]);
//T := GetTickCount - T;
//WriteLn(T, ' ms');
{}QueryPerformanceCounter(i3);
{}i2 := i3 - i2;
{}QueryPerformanceFrequency(i3);
{}WriteLn(i2 * 1000 / i3:0:2, ' ms');
WriteLn;
WriteLn('StringReplace:');
T := GetTickCount;
S3 := StringReplace(S, 'Wort', 'xxx', [rfReplaceAll]);
T := GetTickCount - T;
WriteLn(T, ' ms');
WriteLn;
WriteLn('Ende mit [Enter]');
ReadLn;
End.
raus kommt dann sowas
Code:
baue Teststring zusammen...
1000 Wörter, 13386 Zeichen, 0 ms
StringReplaceX:
0.19 ms
StringReplace:
15 ms
Ende mit [Enter]
Wie man nachfolgend sehen kann, wächst bei Borland's Version
mit steigender Ersetzungsanzahl die Zeit expoteniell an,
wärend sie es bei mir nur linear tut.
Code:
Delphi 7 Delphi 2009
******************************** ********************************
1000 Wörter, 13386 Zeichen 1000 Wörter, 13386 Zeichen
0.19 ms 0.15 ms
15 ms 16 ms
10000 Wörter, 134623 Zeichen 10000 Wörter, 134623 Zeichen
1.85 ms 1.42 ms
1953 ms 484 ms
100000 Wörter, 1351083 Zeichen 100000 Wörter, 1351083 Zeichen
18.41 ms 13.13 ms
208484 ms 293313 ms
1000000 Wörter, 13496864 Zeichen 1000000 Wörter, 13496864 Zeichen
196.06 ms 151.92 ms
{hatte keine Lust zu warten} {schonwieder keine Lust}
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
|