Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa' (https://www.delphipraxis.net/22865-string-mit-gleichen-zeichen-fuellen-z-b-s-%3Daaaaaaaa.html)

Stevie 25. Mai 2004 13:09

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
Zitat:

Zitat von Steve
edit: Ups, zu langsam :stupid:

[OT]Das i macht den Unterschied! 8)[/OT]

sakura 25. Mai 2004 13:11

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
DupeString nutzt intern auch eine Schleife. Ich würde Dir empfehlen auf SetLenght und FillChar auszuweichen.

Mache mal eine Leere App mit einem Button und zwei Labels und vergleiche die Ergebnisse. Hier der Button-OnClick Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Start, Stop, Freq: Int64;
  R1, R2: String;
begin
  QueryPerformanceCounter(Start);
  R1 := DupeString('a', 10000000);
  QueryPerformanceCounter(Stop);
  QueryPerformanceFrequency(Freq);
  Label1.Caption := Format('%n ms', [(Stop - Start) / Freq * 1000]);

  QueryPerformanceCounter(Start);
  SetLength(R2, 10000000);
  FillChar(R2[1], 10000000, 'a');
  QueryPerformanceCounter(Stop);
  QueryPerformanceFrequency(Freq);
  Label2.Caption := Format('%n ms', [(Stop - Start) / Freq * 1000]);
end;
...:cat:...

P.S.: DupeString ca. 1 Sekunde; FillChar ca. 20 Millisekunden :shock:

nailor 25. Mai 2004 13:11

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
wie wärs mit stringofchar

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
caption := stringofchar('a', 100);
end;

sakura 25. Mai 2004 13:14

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
Zitat:

Zitat von nailor
wie wärs mit stringofchar

Ich habe wieder etwas gelernt :firejump: Im Ernst, StringOfChar und meine Variante sind ca. gleich schnell, StringOfChar ist allerdings durch den Compiler besser integriert und somit wohl einen klitzekleinen Tick schneller ;)

...:cat:...

Stevie 25. Mai 2004 13:16

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
Zitat:

Zitat von sakura
P.S.: DupeString ca. 1 Sekunde; FillChar ca. 20 Millisekunden :shock:

Bei mir 1 sek und 60 ms

Hast gewonnen! :roll:

P.S. Bei mir ist StringOfChar etwas langsamer...

P.P.S Endlich Club Member

nailor 25. Mai 2004 13:16

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
::: froi ::: :party: :cheers: :bouncing4:

aber ich glaub die frage hatten wir schon ein paarmal :wink:

Hier im Forum suchenstringofchar



ps: bei mir:
dupe 330 - 16 fillchar

sakura 25. Mai 2004 13:22

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
Zitat:

Zitat von Stevie
P.S. Bei mir ist StringOfChar etwas langsamer...

Ich würde es Dir trotzdem empfehlen, da es "nativ" zu Delphi gehört ;)

...:cat:...

Stevie 25. Mai 2004 13:34

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
Zitat:

Zitat von sakura
Zitat:

Zitat von Stevie
P.S. Bei mir ist StringOfChar etwas langsamer...

Ich würde es Dir trotzdem empfehlen, da es "nativ" zu Delphi gehört ;)

...:cat:...

Häh?? :gruebel: Versteh ich nicht...

nailor 25. Mai 2004 13:41

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
die katze herself ;)

empfieht, die StringOfChar-Variante zu nehmen, weil sie "von sich aus" bei Delphi dabei ist. Auch falls sie (ist sie aber nicht ;) ) langsamer sein sollte.


######

Ich vermute, dass dieses vorteilhaft ist

a) bei der Optimierung des Codes durch den Compiler (?)
b) der Zukunftssicherheit des Codes (die DIYS-Variante könnte irgendwann Fehler hervorrufen, StringOfChar wird es wahrscheinlich noch ne ganze Weile geben)

sakura 25. Mai 2004 13:47

Re: String mit gleichen Zeichen füllen z.B. s:='aaaaaaaa'
 
Zitat:

Zitat von nailor
empfieht, die StringOfChar-Variante zu nehmen, weil sie "von sich aus" bei Delphi dabei ist. Auch falls sie (ist sie aber nicht ;) ) langsamer sein sollte.

Nicht unbedingt, ich habe mir schon einige lahme Delphi-Routinen umgeschrieben.

Ich denke mal, daß es bei der Überprüfung welche schneller ist, eher zu Messfehlern gekommen ist (ich denke mal +/-10 Millisekunden ;) ), da es immer noch andere Dinge zu tun gibt auf dem PC.

Ein weiterer Grund ist, das StringOfChar eine einzige Zeile benötigt und einfach sauberer ist. Das ist dann von Vorteil für den Entwickler ;)

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr.
Seite 2 von 3     12 3      

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