Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   "Component is TButton" oder "Component.ClassName" (https://www.delphipraxis.net/202800-component-tbutton-oder-component-classname.html)

hoika 10. Dez 2019 13:22

"Component is TButton" oder "Component.ClassName"
 
Hallo,
ich möchte bei allen Buttons eines Forms eine Aktion durchführen, also etwa so
Delphi-Quellcode:
var
  iComponent: Integer;
  Component: TComponent;
  Button: TButton;
begin
  for iComponent:= 0 to ComponentCount-1 do
  begin
    Component:= Components[iComponent);

     if Component is TButton then
     begin
       Button:= TButton(Component);
       //jetzt was mit dem Button machen
     end;

//     oder
     if Component.ClassName='TButton' then
     begin
     end;
  end;
Gefühlt würde ich sagen, ClassName ist schneller, weil kein RTTI verwendet wird.

Was meint ihr?

Klaus01 10. Dez 2019 13:34

AW: "Component is TButton" oder "Component.ClassName"
 
Hallo,

solltest Du nicht besser classType verwenden anstelle von className?
Diskussion hier.

Grüße
Klaus

hoika 10. Dez 2019 13:39

AW: "Component is TButton" oder "Component.ClassName"
 
Hallo,
ClassType hört sich für mich auch wieder nach RTTI an.

freimatz 10. Dez 2019 13:50

AW: "Component is TButton" oder "Component.ClassName"
 
Hallo,
ich bin recht eindeutig für "Component is TButton".
Wenn Geschwindigkeit eine Rolle spielt dann hast Du ein falsches Design. In der UI spielt Geschwindigkeit eh meist keine Rolle.

Uwe Raabe 10. Dez 2019 13:59

AW: "Component is TButton" oder "Component.ClassName"
 
Zitat:

Zitat von hoika (Beitrag 1453171)
ClassType hört sich für mich auch wieder nach RTTI an.

Nicht wirklich:
Delphi-Quellcode:
function TObject.ClassType: TClass;
begin
  Pointer(Result) := PPointer(Self)^;
end;

hoika 10. Dez 2019 14:00

AW: "Component is TButton" oder "Component.ClassName"
 
Hallo,
Zitat:

Wenn Geschwindigkeit eine Rolle spielt
Einspruch, natürlich sollte die Performance immer eine Rolle spielen,
sonst hätten wir heute noch 286-er mit 16 MHz (ja der mit dem Turbo ! ;) )

hoika 10. Dez 2019 14:04

AW: "Component is TButton" oder "Component.ClassName"
 
Hallo Uwe,
das sieht auf jeden Fall schneller als mein String-Vergleich aus ;)

Danke.

Stevie 10. Dez 2019 14:36

AW: "Component is TButton" oder "Component.ClassName"
 
Bei
Delphi-Quellcode:
x is someclass
fügt der Compiler einen Aufruf auf System._IsClass ein. Das ist nicht nur >10mal schneller als der ganze Kram, der in TObject.ClassName und dem String vergleich passiert, sondern - und das ist viel wichtiger - es liefert auch True zurück, wenn x eine Instanz einer von someclass abgeleiteten Klasse ist (hallo Polymorphie)

Fast schockierend, dass Delphientwickler immer noch denken, dass etwas, was eine Funktion beinhaltet, die einen string zurückliefert, mit dem etwas gemacht wird, irgendwie schneller sein könnte als ein bisschen Pointer vergleichen. :stupid:

P.S.: Schneller als is wäre übrigens InheritsFrom wenn man auf den assigned Check verzichten kann - das spart nochmal einen Call ;)

freimatz 10. Dez 2019 15:44

AW: "Component is TButton" oder "Component.ClassName"
 
Zitat:

Zitat von hoika (Beitrag 1453178)
Hallo,
Zitat:

Wenn Geschwindigkeit eine Rolle spielt
Einspruch, natürlich sollte die Performance immer eine Rolle spielen,
sonst hätten wir heute noch 286-er mit 16 MHz (ja der mit dem Turbo ! ;) )

Einspruch abgelehnt. Natürlich sollte die Performance NICHT immer eine Rolle spielen, sondern nur in Ausnahmefällen.
https://clean-code-developer.de/die-..._Optimierungen

Stevie 10. Dez 2019 16:05

AW: "Component is TButton" oder "Component.ClassName"
 
Zitat:

Zitat von freimatz (Beitrag 1453185)
Einspruch abgelehnt. Natürlich sollte die Performance NICHT immer eine Rolle spielen, sondern nur in Ausnahmefällen.
https://clean-code-developer.de/die-..._Optimierungen

Auch falsch - es kommt auf den Code an, den man entwickelt. Wenn ich was in nem ButtonClick Implementiere ist es herzlich egal, obs in dem Bruchteil einer Nanosekunde oder in 5 Millisekunden passiert. Wenn man allerdings in einer Kern Laufzeit Klasse oder Methode entwickelt, dann ist es wichtig, die Sprache, Compiler und Standard Runtime zu kennen, damit man das Optimum rausholt.

Wenn man aber sieht, wie selbst manche Runtime Entwickler nen halbes Duzend Ebenen der Abstraktion aufeinander schichten und das Endergebnis einfach nur unerträglich langsam werden kann, dann könnte man einfach nur :kotz:


Übrigens regt sich fast jeder auf, dass dieses vermaledeite Electron so resourcenhungrig ist und nen blöder Chrome mit zig Tabs die Gigabytes auffuttert wie Kekse... aber Code Optimieren ist böse oder was? :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr.
Seite 1 von 2  1 2      

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