Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ladebalken der anzeigt wan procedure beendet ist (https://www.delphipraxis.net/109013-ladebalken-der-anzeigt-wan-procedure-beendet-ist.html)

marabu 23. Feb 2008 17:09

Re: Ladebalken der anzeigt wan procedure beendet ist
 
Hallo,

solange du deinen Code noch beschleunigen kannst, solltest du nicht an einen Ladebalken denken.

Delphi-Quellcode:
function Encode(const s, key1a, ..., key3b: string): string;
var
  buf: string;
begin
  buf := StringReplace(s, 'a','th%6' , [rfReplaceAll]);
  buf := StringReplace(buf, 'b','g' + key3b + 'fhu' , [rfReplaceAll]);
  // ...
  buf := StringReplace(buf, '9','H$' + key1b + ')' , [rfReplaceAll]);
  Result := StringReplace(buf, '0','H$' + key1b + '=' , [rfReplaceAll]);
end;
So hast du deine Prozedur zur Funktion umgebaut. Da jetzt nicht mehr 126 mal auf die Texteigenschaft des Memos zugegriffen wird, wird der Code sicher etwas schneller ausgeführt. Noch schneller wird der Code, wenn du nicht mehr mit StringReplace() arbeitest, da mit dieser Funktion jedesmal wieder der gesamte Text abgesucht wird. Wenn du nur einmal über deinen Text gehst, wird alles noch schneller.

Delphi-Quellcode:
function Encode(const s, key1a, ..., key3b: string): string;
var
  i: Integer;
  buf: string;
begin
  buf := '';
  for i := 1 to Length(s) do
    case s[i] of
      'a': buf := buf + 'th%6';
      'A': buf := buf + 'g' + key3b + 'fhu';
      // ...
      '9': buf := buf + 'H$' + key1b + ')';
      '0': buf := buf + 'H$' + key1b + '=';
      else buf := buf + s[i];
    end;
  Result := buf;
end;
Wenn du dann als nächsten Schritt noch die zu erwartende Größe des Ergebnisses berechnest, dann entfällt auch noch das aufwändige schrittweise Vergrößern von buf und alles wird noch einmal deutlich schneller.

Bevor du dann daran gehst einen Fortschrittsbalken anzuzeigen, musst du erstmal den zu erwartenden Zeitbedarf ausrechnen.

Freundliche Grüße vom marabu

Deltachaos 24. Feb 2008 13:09

Re: Ladebalken der anzeigt wan procedure beendet ist
 
Zitat:

Zitat von marabu
Hallo,

solange du deinen Code noch beschleunigen kannst, solltest du nicht an einen Ladebalken denken.

Delphi-Quellcode:
function Encode(const s, key1a, ..., key3b: string): string;
var
  buf: string;
begin
  buf := StringReplace(s, 'a','th%6' , [rfReplaceAll]);
  buf := StringReplace(buf, 'b','g' + key3b + 'fhu' , [rfReplaceAll]);
  // ...
  buf := StringReplace(buf, '9','H$' + key1b + ')' , [rfReplaceAll]);
  Result := StringReplace(buf, '0','H$' + key1b + '=' , [rfReplaceAll]);
end;
So hast du deine Prozedur zur Funktion umgebaut. Da jetzt nicht mehr 126 mal auf die Texteigenschaft des Memos zugegriffen wird, wird der Code sicher etwas schneller ausgeführt. Noch schneller wird der Code, wenn du nicht mehr mit StringReplace() arbeitest, da mit dieser Funktion jedesmal wieder der gesamte Text abgesucht wird. Wenn du nur einmal über deinen Text gehst, wird alles noch schneller.

Delphi-Quellcode:
function Encode(const s, key1a, ..., key3b: string): string;
var
  i: Integer;
  buf: string;
begin
  buf := '';
  for i := 1 to Length(s) do
    case s[i] of
      'a': buf := buf + 'th%6';
      'A': buf := buf + 'g' + key3b + 'fhu';
      // ...
      '9': buf := buf + 'H$' + key1b + ')';
      '0': buf := buf + 'H$' + key1b + '=';
      else buf := buf + s[i];
    end;
  Result := buf;
end;
Wenn du dann als nächsten Schritt noch die zu erwartende Größe des Ergebnisses berechnest, dann entfällt auch noch das aufwändige schrittweise Vergrößern von buf und alles wird noch einmal deutlich schneller.

Bevor du dann daran gehst einen Fortschrittsbalken anzuzeigen, musst du erstmal den zu erwartenden Zeitbedarf ausrechnen.

Freundliche Grüße vom marabu

ich verstehe den code nicht gantz. kanst du ihn erleutern?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Seite 4 von 4   « Erste     234   

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