AGB  ·  Datenschutz  ·  Impressum  







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

String vorne mit Nullen auffüllen

Ein Thema von Walter Landwehr · begonnen am 11. Sep 2022 · letzter Beitrag vom 12. Sep 2022
Antwort Antwort
Seite 3 von 3     123   
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: String vorne mit Nullen auffüllen

  Alt 12. Sep 2022, 14:27
Dennis07, wieso hast du den ersten Parameter auf einen AnsiString geändert? Die Funktion StringOfChar gibt es für Ansi und Unicode und somit läuft die Funktion mit dem String Typ tadellos.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: String vorne mit Nullen auffüllen

  Alt 12. Sep 2022, 16:20
@Dennis07 Weil meine AnsiString Variante um ein dutzendfach schneller ist.
Dass das einen signifikanten Unterschied macht bezweifle ich. Deshalb habe ich mal einen Speedtest gemacht.

Um ein ein relevantes Ergebnis zu haben habe ich beide Funktionen je 100.000 mal hintereinander mit zufälligen Strings und einem '0'-Zeichen durchlaufen lassen und habe zufällige Einrückungen im selben Spektrum genommen.
Das ganze habe ich 100 mal durchlaufen lassen und den Durchschnitt gebildet.

Die Ergebnisse siehst du im Anhang. Gerne gebe ich dir den Quelltext, damit du es selbst probieren kannst.

FillString1 ist von dir, FillString2 ist meine Variante. In dem Beispiel war deine um ca. 2 Ticken schneller bei der Aufrufzahl, was mich jetzt nicht überrascht hat. Kann aber auch an ungleichen Zufallszahlen liegen, wer weiß.
Es geht mir jetzt halt nicht darum, deinen Code schlecht zu reden oder so, nichts läge mir ferner. Aber ich wollte mich selbst davon überzeugen, dass der unter Win32 auf keinen Fall "dutzendfach langsamer" ist. Selbst, wenn meiner jetzt schneller wäre, würden wir hier von durchschnittlich zwei Ticks pro 100.000 Aufrufen sprechen, was in so ziemlich allen Anwendungsgebieten wohl kaum ins Gewicht fallen würde.
Miniaturansicht angehängter Grafiken
speedtest.png  
Dennis

Geändert von Dennis07 (12. Sep 2022 um 16:30 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: String vorne mit Nullen auffüllen

  Alt 12. Sep 2022, 16:29
Dennis07, wieso hast du den ersten Parameter auf einen AnsiString geändert? Die Funktion StringOfChar gibt es für Ansi und Unicode und somit läuft die Funktion mit dem String Typ tadellos.
Habe ich nicht, CodeZwerg hatte das schon so, ich habe nur mal eben den Body neu geschrieben. Wie ich aber jetzt sehe, hast du ja auch eine ähnliche Lösung vorgeschlagen.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#24

AW: String vorne mit Nullen auffüllen

  Alt 12. Sep 2022, 16:33
Kann aber auch an ungleichen Zufallszahlen liegen, wer weiß.
Ermittele mal die Zufallszahlen vorher und schreibe die in ein Array. Zum Einen bekommst du dann besser vergleichbare Ergebnisse und zum Anderen fließt die Zeit für die Random-Aufrufe nicht in die Messung mit ein.

Weiterhin würde ich TStopWatch zur Messung nehmen. Das ist potentiell genauer.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: String vorne mit Nullen auffüllen

  Alt 12. Sep 2022, 17:14
Dennis07, wieso hast du den ersten Parameter auf einen AnsiString geändert? Die Funktion StringOfChar gibt es für Ansi und Unicode und somit läuft die Funktion mit dem String Typ tadellos.
Habe ich nicht, CodeZwerg hatte das schon so, ich habe nur mal eben den Body neu geschrieben. Wie ich aber jetzt sehe, hast du ja auch eine ähnliche Lösung vorgeschlagen.
Ah ok. Habe mich halt immer nur auf den originalen Post des Threaderstellers konzentriert und da nur die Zeile die einen AV produziert hat, geändert. Wieso da auf einmal AnsiString in das Problem des OP reinkommt ist mir rätselhaft. Die Lösung mit StringOfChar ist doch die einfachste und beste für seine Anforderung. Ich bezweifle, dass der OP diesen Code 1 Mio. mal möglichst schnell ausführen will. Selbst wenn das pro Sekunde 1000 mal gemacht wird, gibt es kaum einen nennenswerten Unterschied. Wenn dann noch die Konvertierung String zu AnsiString und retour, dazu kommt, ist vermultich der ganze Vorteil eh wieder weg, mal ganz davon abgesehen von den womöglich verlorenen Ansizeichen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#26

AW: String vorne mit Nullen auffüllen

  Alt 12. Sep 2022, 17:21
Die "Einfachste" ist doch wohl eher Delphi-Referenz durchsuchenPadLeft
oder bei "Integer" ansatt String, das mit dem Format.

https://www.delphipraxis.net/211405-...ml#post1511610
https://www.delphipraxis.net/211405-...ml#post1511623
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 18:17 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