![]() |
AW: Stringfunktionen
Zitat:
|
AW: Stringfunktionen
Die
![]() Ich verwende unter D5 noch die Version 1.0.4, weil ich mit den (damals) neuen 2.0x Versionen Probleme hatte. Auf jeden Fall erhälst du mit der JCL ein volles Paket an Units mit vielen nützlichen Funktionen. Dein Programm wird dabei kaum grösser, weil der Linker nur die Funktionen dazulinkt, die du auch benützt hast. |
AW: Stringfunktionen
Zitat:
|
AW: Stringfunktionen
Zitat:
|
AW: Stringfunktionen
Zitat:
Denn es kommt auf den Einsatzzweck drauf an. - wird es sehr oft aufgerufen, dann könnte es schon wichtig sein - ist die zeit egal, dann ist auch die Geschwindigkeit egal (bzw. es muß nicht unbedingt das Allerschnellste sein) - und manchmal reicht es, wenn es ausreichend flott ist, aber man dafür wartbaren code bekommt, welchen man eventuell auch noch selber versteht. Ansonsten kannst du ja immernoch nachmessen, bzw. etwas nehmen, was dir vom Code her gefällt und sollte es doch noch geschwindigkeitsprobleme geben, dann könnte man immer noch nachsehn was schneller/optimaler ist. Wie es schon erwähnt wurde: Wenn es um einzelne Funktionen geht, dann bieten die Forensuche, die CL, sowie Google und die anderen Delphi-Webseiten sehr viel. Und notfalls fragt man eben hier geziehlt nach. |
AW: Stringfunktionen
Zunächst muss eine Routine zuverlässig funktionieren, danach kann man dann sehen, wie man die Geschwindigkeit ggf. erhöhen könnte. Dreht man diese Reihenfolge um, kommt selten etwas Brauchbares dabei heraus.
Zitat:
|
AW: Stringfunktionen
Zitat:
"Nicht nur in dem Bereich wäre also eine Sammlung interessant die mehrere Lösungen präsentiert und dies vielleicht sogar mit Performenzangaben je nach Verwendungszweck." Zitat:
Zitat:
|
AW: Stringfunktionen
Zitat:
Ich habe mal ein Char aus einem String herausgelöst. Was bei einem Leerstring eine Exception wirft, also muss das getestet werden. Ich habe das mit folgenden Varianten gemacht: 1)
Delphi-Quellcode:
2)
if wort = '' then chrtest := #0
else chrtest := wort[1];
Delphi-Quellcode:
3)
if wort <> '' then chrtest := wort[1]
else chrtest := #0;
Delphi-Quellcode:
4)
if length(wort)=0 then chrtest := #0
else chrtest := wort[1];
Delphi-Quellcode:
5)
if length(wort)>0 then chrtest := wort[1]
else chrtest := #0;
Delphi-Quellcode:
Auf meinem PC war die Variante 2 die schnellste, wenn auch nur unwesentlich schneller als 1.
try
chrTest := wort[1]; except chrTest := #0; end; Variante 4 hat ungefähr doppelt solange gedauert, wiederum unwesentlich schneller als 3. Der Try Block etwas langsamer noch als 3/4 (außer die Exception wurde geworfen, das hat gedauert). Wenn der Fall eintrat dass der String leer war erhöhte sich die Abarbeitungszeit. Auf einem anderen, älteren PC war das anders. Die Variante 1 und 2 wurden deutlich schneller bei einem Leerstring. Und die Varianten 3 und 4 etwas schneller. Also ist auch noch relevant wie man testet und welcher der Ziel PC ist. Der Try Block war auch da langsamer bei einer Exception. |
AW: Stringfunktionen
Zitat:
Denn fang jetzt mal an dein Programm zu debuggen, wenn da genügend solcher Code drin vorkommt, dann kannst'e dich auch gleich erschießen, denn sowas macht absolut keinen Spaß mehr. Im Fall von Zahlen ist das sehr gut beobachtbar:
Delphi-Quellcode:
try
i := StrToInt(s); except i := 0; end; // oder i := StrToIntDef(s, 0);
Delphi-Quellcode:
Vorallem leere except-end-Blöcke sind grauenhaft.
try
i := StrToInt(s); {mach was mit i} except end; // oder if TryStrToInt(s, i) then {mach was mit i} Bezüglich der Unterschiede zwischen = und <>. Dort hängt es sehr von den Eingangsdaten ab. Da ist mir persönlich fast immer alles egal und ich verwende die Variante, welche ich besser lesen kann. Außerdem versuche ich durchgängig nur eine Variante zu verwenden, weil man den gesamten Code dadurch auch besser verstechen kann. (man verliest sich weniger) |
AW: Stringfunktionen
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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-2025 by Thomas Breitkreuz