Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.534 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Generic Graph class

  Alt 2. Feb 2015, 21:53
Ab XE7 empfehle ich, GetTypeKind(T) zu nutzen. Das evaluiert der Compiler direkt und entfernt somit nicht ausgeführte Codepfade.
In der Tat. Ich habe mir das mal im CPU-Fenster angesehen: Je nachdem, mit welchem Datentyp die Klasse TNetGraph instantiiert wird, hat der Compiler im Aufruf von "GetNetitem" bei GetTypeKind nur noch das Benötigte belassen und alles Überflüssige raus gemschmissen.

Anlage 1 zeigt den Source-Code und Anlage 2 die CPU zur Laufzeit bei Instantiierung der Klasse per "Integer". Der direkte Vergleich der 2 Abfragevarianten (Grün=GetTypeKind / Gelb=PTypeInfo) zeigt, dass man mit GetTypeKind erheblich Speicher einsparen kann.

Immerhin ein kleiner Trost für die Tatsache, dass die Verwendung von Generics im Allgemeinen zu Dopplungen des Speicherbedarfes führt (bei Instantiierung der Klasse mit unterschiedlichen Datentypen). Wobei natürlich auch weitere Vorteile von Generics "trösten", z.B. Fehler schon bei der Entwicklung auszumerzen und in gewissem Umfang auch Geschwindigkeitsoptimierungen erzielen zu können.

Guter Tipp!
Miniaturansicht angehängter Grafiken
source_view.jpg   cpu_view.jpg  
  Mit Zitat antworten Zitat