AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi "Component is TButton" oder "Component.ClassName"
Thema durchsuchen
Ansicht
Themen-Optionen

"Component is TButton" oder "Component.ClassName"

Ein Thema von hoika · begonnen am 10. Dez 2019 · letzter Beitrag vom 15. Dez 2019
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

"Component is TButton" oder "Component.ClassName"

  Alt 10. Dez 2019, 13:22
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='TButtonthen
     begin
     end;
  end;
Gefühlt würde ich sagen, ClassName ist schneller, weil kein RTTI verwendet wird.

Was meint ihr?
Heiko
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 10. Dez 2019, 13:34
Hallo,

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

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 10. Dez 2019, 13:39
Hallo,
ClassType hört sich für mich auch wieder nach RTTI an.
Heiko
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 10. Dez 2019, 13:50
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 10. Dez 2019, 13:59
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 10. Dez 2019, 14:00
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 ! )
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

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

  Alt 10. Dez 2019, 14:04
Hallo Uwe,
das sieht auf jeden Fall schneller als mein String-Vergleich aus

Danke.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

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

  Alt 10. Dez 2019, 14:36
Bei 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.

P.S.: Schneller als is wäre übrigens InheritsFrom wenn man auf den assigned Check verzichten kann - das spart nochmal einen Call
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (10. Dez 2019 um 14:52 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 10. Dez 2019, 15:44
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
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

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

  Alt 10. Dez 2019, 16:05
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


Ü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?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (10. Dez 2019 um 16:11 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.
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