Einzelnen Beitrag anzeigen

Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#7

Re: Funktionsaufruf: Dauert immer länger. Warum?

  Alt 11. Apr 2009, 13: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.
  Mit Zitat antworten Zitat