![]() |
"Component is TButton" oder "Component.ClassName"
Hallo,
ich möchte bei allen Buttons eines Forms eine Aktion durchführen, also etwa so
Delphi-Quellcode:
Gefühlt würde ich sagen, ClassName ist schneller, weil kein RTTI verwendet wird.
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; Was meint ihr? |
AW: "Component is TButton" oder "Component.ClassName"
Hallo,
solltest Du nicht besser classType verwenden anstelle von className? Diskussion ![]() Grüße Klaus |
AW: "Component is TButton" oder "Component.ClassName"
Hallo,
ClassType hört sich für mich auch wieder nach RTTI an. |
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. |
AW: "Component is TButton" oder "Component.ClassName"
Zitat:
Delphi-Quellcode:
function TObject.ClassType: TClass;
begin Pointer(Result) := PPointer(Self)^; end; |
AW: "Component is TButton" oder "Component.ClassName"
Hallo,
Zitat:
sonst hätten wir heute noch 286-er mit 16 MHz (ja der mit dem Turbo ! ;) ) |
AW: "Component is TButton" oder "Component.ClassName"
Hallo Uwe,
das sieht auf jeden Fall schneller als mein String-Vergleich aus ;) Danke. |
AW: "Component is TButton" oder "Component.ClassName"
Bei
Delphi-Quellcode:
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)
x is someclass
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 ;) |
AW: "Component is TButton" oder "Component.ClassName"
Zitat:
![]() |
AW: "Component is TButton" oder "Component.ClassName"
Zitat:
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 17:42 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