![]() |
[Optimieren] TStringList
Delphi-Quellcode:
Wie kann man das obrige optimieren? Dat,plain und table sind vom typ TStringlist.
for i := 1 to length(plain.Text) do
begin x := ord(plain.text[i]); if table[x] = '0' then table[x] := inttostr((ord(dat.text[i]))); if i mod 2000 = 0 then begin Progressbar1.Position := Progressbar1.Position + 1; Application.ProcessMessages; end; end; 0 ist der default Wert. danke fuer jede hilfe :) greetz felix |
Re: [Optimieren] TStringList
war quatsch
|
Re: [Optimieren] TStringList
Hallo,
erste Optimierung: Schreibe Plain.Text und Ord.Text in Hilfsvariablen. Ansonsten wird bei jedem Aufruf der Text erneut zusammengesetzt. Gruß xaromz |
Re: [Optimieren] TStringList
wow, danke =)))
Braucht noch 1 Sekunde davor 10 Minuten :firejump: |
Re: [Optimieren] TStringList
:shock: Waaaaaas?????
Hab ich dich falsch verstanden oder hast du die Rechenzeit jetzt echt von 10 Minuten auf 1 Sekunde runtergekriegt??????????? |
Re: [Optimieren] TStringList
Delphi-Quellcode:
ich gehe davon aus das Table[] als Table[Byte] of String deklariert wurde. Ändere die ab inif table[x] = '0' then table[x] := inttostr((ord(dat.text[i])));
Delphi-Quellcode:
damit optimierst du das IntToStr() weg, was sehr inperformant ist. In table[] stehen dann ASCII Zeichen die du wenn es nötig ist mit IntToStr(Ord(table[char(i)])) umwandeln kannst. Ich denke aber das das garnicht nötig sein wird.
var
table: array[char] of Char; // table initalisiieren mit FillChar(table, SizeOf(table), 0); // in deiner Schleife nun x := plainText[I]; // x type Char if table[x] = #0 then table[x] := ordText[i]; Gruß Hagen |
Re: [Optimieren] TStringList
Moin Cöster,
probier's mal aus. Die ständige Verwendung von Text ist eine der stärksten Bremsen, die man einbauen kann. (Du darfst es natürlich nicht mit ganz wenigen Zeilen versuchen). |
Re: [Optimieren] TStringList
Naja, ist eine kleine Optimerung. Selbst bei einem Text mit Milliarden von Zeichen kann es ja nur 256 unterschiedliche Zeichen geben. Da der NULL Terminator #0 im String nicht vorkommt also exakt 255 Möglichkeiten. Also selbst bei sehr langen String dürfte IntToStr() nur maximal 255 mal aufgerufen werden. Allerdings gehts mir garnicht um Performance sondern um Qualität im Source. Denn du hast deine Datentypen nicht sauber ausgewählt und versucht mit Strings zu rechnen. Ein Indiz für meine Behauptung sind die vielen TypCast die du anwendest -> table[ord(Char)] := IntToStr(Ord(char)) usw. Besser ist es eben gleich Table sauber zu deklarieren und dann mit table[char] := char; zu arbeiten.
Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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 by Thomas Breitkreuz