Registriert seit: 25. Jun 2006
519 Beiträge
Delphi 7 Personal
|
Re: Funktionsaufruf: Dauert immer länger. Warum?
11. Apr 2009, 14:41
Ich habe mal beide Versionen nachstehend eingefügt.
a) Version mit der Mengenabfrage und b) Abfrage mit einer Tabelle.
Delphi-Quellcode:
program ClearString1;
{$APPTYPE CONSOLE}
uses
FastMM4, FastMove,
SysUtils, // Für Profiler.inc notwendig
Windows; // Für Profiler.inc notwendig
{$include Profiler.inc}
var
xx,ii:Integer;
var
ValidChars1: array[1..53] of Char = ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
// Alte Version:
function ClearStrAlt(const Str: string): String;
var
i:Integer;
const
ValidChars = ['a'..'z','A'..'Z','ä','ö','ü','Ä','Ö','Ü','ß',' '];
begin
if Str = '' then Exit;
result:='';
for i:=1 to Length(Str) do if str[i] in ValidChars then result:=result+Str[i];
end;
//Neue Version:
function ClearStr(const Str: string): String;
var
i,x:Integer;
begin
if Str = '' then Exit;
result:='';
for i:=1 to Length(Str) do
begin
for x:=1 to 53 do
if (str[i] = ValidChars1[x]) then //Hier durchlaufen wir die Tabelle
begin
result:=result+Str[i];
Break; //... und for-Schleife verlassen.
end;
end;
end;
begin
Writeln('Teste... ClearStr - Alte Version:');
for xx:=1 to 10 do
begin
Start;
for ii:=1 to 100000 do ClearStrAlt('>a-uf d?er Ma!uer<');
Stopp;
end;
Writeln('Ergebnis muss - auf der Mauer - sein:');
Writeln(ClearStrAlt('>a-uf d?er Ma!uer<'));Writeln;
Writeln('Teste... ClearStr - Neue Version:');
for xx:=1 to 10 do
begin
Start;
for ii:=1 to 100000 do ClearStr('>a-uf d?er Ma!uer<');
Stopp;
end;
Writeln('Ergebnis muss - auf der Mauer - sein:');
Writeln(ClearStr('>a-uf d?er Ma!uer<'));Writeln;
Writeln('- ProgrammEnde mit [ENTER] -');Readln;
end.
Fazit: Die Version mit der Menge ist deutlich schneller, als die mit der Tabelle.
Das Einbinden von FastMM4 und Move bringt nochmals einen deutlichen Gewindigkeitsschub.
|