![]() |
Performance: String ODER TCaption immer auslesen?
Da ich vermutlich öfter ein Wert aus einem Textfeld (LEValue) auslesen muss, wollte ich fragen, was besser ist:
immer mit LEValue.Text oder zuerst LEValue.Text in String speichern und dann mit den String arbeiten? LEValue.text wird nie verändert ;) |
Re: Performance: String ODER TCaption immer auslesen?
In Zeiten von 3GHZ CPU sollte das eine Frage sein, die man sich erst dann stellt, wenn man das letzte Quentchen Performance aus seiner Applikation rausholen muss.
Bis dahin gilt: Übersichtlichkeit, Robustheit, Lesbarkeit. Sonst nichts! Es kann übersichtlicher sein, die Eigenschaft in einer lokalen Variablen zu speichern, schneller ist das, bei gut gebauten Getter-Methoden, eigentlich nicht. An Deinem Alter sehe ich, das Du vielleicht noch tendentiell am Anfang einer langen Programmiererkarriere stehst. Versteh mich nicht falsch, ich will nicht überheblich sein, oder von oben herab (leider passiert mir das ab und an), aber wenn deine Überlegung nicht nur theoretischer Natur ist, geht sie in die falsche Richtung. Bitte versuche, deine Programme so elegant wie nur irgend möglich zu erstellen. Dabei ergibt sich eine gewisse Performance von selbst. Vor allen Dingen aber wird die Applikation robust. |
Re: Performance: String ODER TCaption immer auslesen?
Ich denke (wobei ich auch finde, dass diese Abfrage vernachlässigbar ist, wenn sie nicht grade im Intervall von 1ms durchgeführt wird) der Effekt der Selbe ist, ob ich nun einen String aus einer property oder einer Variable auslese. Ansonsten einfach mal mit GetTickCount messen (wenn dieser denn genau genug sein sollte)
Florian |
Re: Performance: String ODER TCaption immer auslesen?
Danke erstmal ;)
Delphi-Quellcode:
lohnt es sich da (vielleicht auch wegen der übescihtlichkeit?).
if TryStrToInt(LEValue.Text) then begin
if TryStrToBool(LEValue.Text) then begin end else if TryStrToFloat(LEValue.Text) then begin end; end else if TryStrToDate(LEValue.Text) then begin end else if TryStrToTime(LEValue.Text) then begin end; |
Re: Performance: String ODER TCaption immer auslesen?
Zitat:
|
Re: Performance: String ODER TCaption immer auslesen?
Da hinter "Caption" bzw. "Text" in der Regel eine Funktion steckt wird beim Aufruf der Funktion der Rückgabewert kopiert. Bei einem Edit wird bei jedem Aufruf von "Edit.Text" der Buffer auf den String kopiert. Wenn man also den Wert öfter benötigt ist es bedeutend schneller den Wert auf eine Stringvariable zwischen zu speichern.
|
Re: Performance: String ODER TCaption immer auslesen?
Alzaimer hat das wichtigste gesagt, das was danach kam, das hat er wohl noch nicht gelesen. Da wird er wohl demnächst einen Kommentar dazu abgeben. 8) Meiner kommt jetzt schon (und bitte nicht direkt drohen, vom Dach zu springen oder so ähnlich :stupid: ) : ich sehe eine Ansammlung von Try and Error in Sphagetticode-Form. Also : Könnte das nicht gehen, dann probiere was anderes. Geht nicht ? Dann probiere wieder was anderes. Solange eben bis es geht. Angenommen, in dem String steht 1 drin. Erste Zeile überprüft auf integer. Die zweite auf boolean. Wer sagt jetzt, daß die 1 kein real ist ? Erst dann nämlich wird auch auf real geprüft. Dis Prüfung auf Boolean liefert ja schon einen Fehler, sofern "true" erwartet wird. Dabei wäre die 1 ein gültiger real. :wall: Wenn ich da jetzt auf die Schnelle alles richtig gesehen habe. Das nennt man deshalb Sphagetti - Code, weil man den Anfang zwar sieht, aber nicht mehr wo das Ende rauskommt und was dazwischen passiert. Die Frage, was schneller ist, die verliert in dem Zusammenhang jegliche Bedeutung !
|
Re: Performance: String ODER TCaption immer auslesen?
Zitat:
Hier soll offensichtlich ein String umgewandelt werden, entweder in eine Zahl, Datum, etc. Da würde ich eine Funktion definieren, zumal einem diese Problemstellung doch häufiger unterkommt. Die Funktion könnte so aussehen:
Delphi-Quellcode:
Und dann der eigentliche Aufgruf...
Function ConvertString(Const s: String): Variant;
Var i: Integer; r: Double; d: TDateTime; b: Boolean; Begin If TryStrToInt(s, i) Then Begin Result := i; Exit End; If TryStrToFloat(s, r) Then Begin Result := r; Exit End; If TryStrToDateTime(s, d) Then Begin Result := d; Exit End; If TryStrToBool(s, b) Then Begin Result := b; Exit End; Result := s; End;
Delphi-Quellcode:
Somit wird auch die ursprüngliche Frage eigentlich überflüssig: Der Zugriff auf die Property ist auf das notwendige Minimum reduziert, die 'Forderung' nach Übersichtlichkeit wurde erfüllt. Alle sind zufrieden.
MyValue := ConvertStringToAny (LEValue.Text);
:dp: Ach, eins noch: Ich kenn den Spaghetticode aus Basic-Zeiten. Bei einer visuellen Codeanalyse mit entsprechender Software wurden die Goto's durch Linien im Code veranschaulicht. Bei schlechter Strukturierung sah das Ganze dann eben aus wie eine Portion Spaghetti. Ohne Soße. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:29 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