AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Code optimieren

Ein Thema von klebe7 · begonnen am 2. Okt 2008 · letzter Beitrag vom 5. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
klebe7

Registriert seit: 2. Okt 2008
19 Beiträge
 
#1

Code optimieren

  Alt 2. Okt 2008, 19:04
Hallo,

Ich bin Anfänger in Delphi und brauche mal Hilfe.
Könnt ihr mir Tipps geben, wie ich folgenden Code beschleunigen/optimieren kann, da er einfach zu langsam ist, wenn ich ihn oft aufrufe.

Delphi-Quellcode:
function RemoveChars(const ASource, AChars: string): string;
var
  i, j: Integer;
  bFlag: Boolean;
begin
  Result := '';
  for i := 1 to Length(ASource) do
  begin
    bFlag := False;
    for j := 1 to Length(AChars) do
      if ASource[i] = AChars[j] then
      begin
        bFlag := True;
        Break;
      end;
    if not bFlag then
      Result := Result + ASource[i];
  end;
end;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Code optimieren

  Alt 2. Okt 2008, 19:14
Guten Abend,

vielleicht geht es so besser?

Delphi-Quellcode:
for i:=1 to length(AChars) do
  begin
    Source:= StringReplace(Source,AChars[i],'',rfReplaceAll);
  end;
Aber ich wüsste jetzt nicht wo in Deinem code eine Bremse
sein sollte.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: Code optimieren

  Alt 2. Okt 2008, 19:18
Mal aus der hohlen Hand:
Delphi-Quellcode:
type TChars = set of Char;

function RemoveChars(const aString: string; Chars: TChars): string;
var i, j: Integer;
begin
  SetLength(Result,Length(aString));
  j := 1;
  for i := 1 to Length(aString) do
    begin
      if not(aString[i] in Chars) then
        begin
          Result[j] := aString[i];
          Inc(j);
        end;
    end;
  SetLength(Result,Pred(j));
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Code optimieren

  Alt 2. Okt 2008, 19:41
Hier eine Version, die nochmal 50% rausholt (die Zeit also quasi halbiert)
Delphi-Quellcode:
function PRemoveChars(const aString: string; Chars: TChars): string;
var
  pSource, pResult, pEnd: PChar;

begin
  SetLength(Result, Length(aString));
  pSource := @aString[1];
  pResult := @Result[1];
  pEnd := pSource + Length(aString) - 1;
  while pSource <= pEnd do begin
    if not (pSource^ in Chars) then begin
      pResult^ := pSource^;
      inc(pResult);
    end;
    inc(pSource);
  end;
  SetLength(Result, integer(pResult) - integer(@Result[1]));
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: Code optimieren

  Alt 2. Okt 2008, 19:43
Das dürfte aber Probleme geben, wenn man einen Leerstring übergibt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
klebe7

Registriert seit: 2. Okt 2008
19 Beiträge
 
#6

Re: Code optimieren

  Alt 2. Okt 2008, 19:45
Vielen Dank an alle. Ich probiere es aus.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Code optimieren

  Alt 2. Okt 2008, 19:56
Zitat von DeddyH:
Das dürfte aber Probleme geben, wenn man einen Leerstring übergibt.
Dann eben eine Abfrage einbauen, alter Pedant
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

Re: Code optimieren

  Alt 3. Okt 2008, 10:22
Mach ich mal:
Delphi-Quellcode:
function PRemoveChars(const aString: string; Chars: TChars): string;
var
  pSource, pResult, pEnd: PChar;

begin
  SetLength(Result, Length(aString));
  if Length(aString) > 0 then
    begin
      pSource := @aString[1];
      pResult := @Result[1];
      pEnd := pSource + Length(aString) - 1;
      while pSource <= pEnd do begin
        if not (pSource^ in Chars) then begin
          pResult^ := pSource^;
          inc(pResult);
        end;
        inc(pSource);
      end;
      SetLength(Result, integer(pResult) - integer(@Result[1]));
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Puhbaehr
(Gast)

n/a Beiträge
 
#9

Re: Code optimieren

  Alt 5. Mär 2009, 09:59
In meiner fast 10 jährigen Erfahrung mit Delphi bin ich eben das erste mal über eine Routine gestolpert die mir bisher unbekannt war.

Zitat von DeddyH:
Mal aus der hohlen Hand:
Delphi-Quellcode:
type TChars = set of Char;

function RemoveChars(const aString: string; Chars: TChars): string;
var i, j: Integer;
begin
  //...
  SetLength(Result,Pred(j));
end;
Pred (x: Integer);
Ist die Routine Pred (x) so viel schneller als x - 1, dass sich die Verwendung lohnt?

Irgendwo hier im Forum las ich einmal, dass die Verwendung von inc/dec (x) sogar langsamer sei als x := x +/- 1;
Aus diesem Grund frage ich.

Gruß, Robert
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Code optimieren

  Alt 5. Mär 2009, 10:03
Zitat von Puhbaehr:
Irgendwo hier im Forum las ich einmal, dass die Verwendung von inc/dec (x) sogar langsamer sei als x := x +/- 1;
Aus diesem Grund frage ich.
Kann ich mir nicht vorstellen, da bei aktuellen Delphi Versionen identischer ASM Code generiert wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz