AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Funktionsaufruf: Dauert immer länger. Warum?
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionsaufruf: Dauert immer länger. Warum?

Ein Thema von Go2EITS · begonnen am 11. Apr 2009 · letzter Beitrag vom 12. Apr 2009
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz