Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

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

AW: Erzeugt Delphi größere/langsamere Projekte mit Generics?

  Alt 12. Jan 2017, 13:23
Was sich glaube ich vor allem geändert hat ist, dass eine TList<TMeineKlasse> bei mehrfacher Deklaration z.B. in Form eines Typs einer Variablen nicht mehrfach als generischer Typ erstellt wurde. Allerdings hatte ich das damals nicht selber getestet, sondern nur gelesen, dass geschrieben wurde, dass das passiert. In Delphi 10.1 ist das auf jedem Fall nicht (mehr) so.
Das ist schon seit mindestens Delphi XE (wenn nicht sogar Delphi 2010) so. Einzig DCUs werden u.U recht groß, da dort jeder benutzte generische Typ einkompiliert wird. Beim Linken in die Binary werden die Duplikate dann aber entfernt.

Fakt ist aber, dass wenn du TList<TFoo> und TList<TBar> in deiner Anwendung benutzt, der Code aus TList<T> zweimal in deiner Anwendung vorhanden ist. Einmal für T = TFoo und einmal für T = TBar.

Aus diesem Grund wurde mit XE7 (oder wars XE8) die System.Generics.Collections so drastisch überarbeitet, so dass viele Methoden direkt auf einen nicht generischen Aufruf geinlined werden - leider wurde hier nur das Problem für die generischen RTL Collection Klassen gelöst und nicht für Generics allgemein (das müsste der Compiler/Linker selbst erledigen - siehe dazu mein Blogartikel).

Sobald man selbst generische Typen schreibt, sollte man sorgfältig designen und so wenig Code wie möglich generisch machen und wenn möglich eine nicht generische Basisklasse unten drunter legen, so dass der am Ende duplizierte Code möglichst klein ist.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (12. Jan 2017 um 13:29 Uhr)
  Mit Zitat antworten Zitat