Einzelnen Beitrag anzeigen

Benutzerbild von Stevie
Stevie

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

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 17:49
Von daher mag das zwar leicht erscheinen, ist es aber nicht...
Doch ist es - es hat nur keine Priorität. Teil der immer größer werdenden Binaries sind auch zu einem signifikanten Teil die Generics, die in den Standardbibliotheken genutzt werden aber vom Compiler nicht eingedampft werden.

Eine leere VCL Anwendung in Delphi 10.3.3 auf Release ist bei mir knappe 2.4MB groß.
Davon sind über 800KB nur Code aus Generics:
59 verschiedene TList<> (ca 400KB)
14 verschiedene TDictionary<,> (ca 120KB)

Von den Listen könnte es 14 weniger geben, wenn man nicht so dämlichen Code in TEnumerable<T>.ToArray schreiben würde, wie derzeit der Fall ist. Denn das sorgt dafür, dass auch für ein TDictionary<TFoo,TBar> eine TList<TPair<TFoo,TBar>> kompiliert wird, die vermutlich niemals nicht benutzt wird.

Und von den dann noch übrig beleibenden 45 Listen könnten grob überschlagen über die Hälfte einfach auf TList<TObject> eingedampt werden, da es alle TList<T> sind, wo T eine Klasse ist.

Bei einer FMX Anwendung sieht das ganze übrigens noch weitaus schlimmer aus. Wenn man dann noch Drittanbieter Komponenten nutzt, die mit wachsender Begeisterung die RTL Collections nutzen, zieht man sich noch mehr unnützen Klump rein.

Im übrigen ist das meiste des Codes, den so eine TList<T> in der Binary verursacht sogar Code der niemals durchlaufen wird, da sie für Aufrufe inlined werden - aber da nunmal für jeden RTL Typ RTTI angeschaltet ist, kann der Linker sie nicht rauswerfen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 7. Feb 2020 um 18:05 Uhr)
  Mit Zitat antworten Zitat