Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Performance: String ODER TCaption immer auslesen? (https://www.delphipraxis.net/69776-performance-string-oder-tcaption-immer-auslesen.html)

xZise 19. Mai 2006 19:31


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 ;)

alzaimar 19. Mai 2006 20:14

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.

Zacherl 19. Mai 2006 20:18

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

xZise 19. Mai 2006 20:57

Re: Performance: String ODER TCaption immer auslesen?
 
Danke erstmal ;)

Delphi-Quellcode:
  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;
lohnt es sich da (vielleicht auch wegen der übescihtlichkeit?).

himitsu 19. Mai 2006 21:10

Re: Performance: String ODER TCaption immer auslesen?
 
Zitat:

Zitat von Florian Bernd
Ansonsten einfach mal mit GetTickCount messen (wenn dieser denn genau genug sein sollte)

Mit Sicherheit nicht (bei 'ner Auflösung von "nur" 10ms) ... es sei den man führt den Code "sehr" oft aus.

SirThornberry 19. Mai 2006 21:38

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.

Hansa 19. Mai 2006 23:37

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 !

alzaimar 20. Mai 2006 12:50

Re: Performance: String ODER TCaption immer auslesen?
 
Zitat:

Zitat von Hansa
Alzaimer ... das hat er wohl noch nicht gelesen. Da wird er wohl demnächst einen Kommentar dazu abgeben. 8)

Woher weiss er das? :mrgreen:

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:
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;
Und dann der eigentliche Aufgruf...
Delphi-Quellcode:
MyValue := ConvertStringToAny (LEValue.Text);
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.

: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