![]() |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Von daher mag das zwar leicht erscheinen, ist es aber nicht... |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Delphi hat bis heute einen sehr schnellen Compiler. Zum einen, weil der wohl nur einen Durchgang benötigt, zum anderen wirkt da wohl noch die Zeit, als Turbopascal in Maschinencode programmiert wurde, nach (waren das noch Zeiten sehr guter Softwarequalität, ich denke da auch an WordPerfect und Geoworks Ensemble!). Doch für die Größe der Compilate wurde entweder wenig bis gar nichts oder jedenfalls wohl nicht so viel Entwicklungsarbeit wie in andere Dinge gesteckt- leider. Einzige Ausnahme, die ich bislang wahrnahm: Von Delphi 6 auf Delphi 7 kann es tatsächlich sogar kleiner werden. Die von jaenicke genannten Datei-/Projektgrößen wirken zunächst einmal erschlagend. Keine Ahnung, wieviele Compilate diese Gesamtgröße verursachen. Ja, und natürlich ist mir klar, daß 64 Bit per se größere Compilate als 32 Bit verursachen muß, das war schon beim Übergang von 16 auf 32 Bit so und natürlich auch, als der Standard von Konsole auf Windows visuelle Komponentne umgestellt wurde. Außerdem bin ich mir sicher, daß andere Programmiersprachen ebenfalls mit diesem Phänomen zu kämpfen haben (oder eher das Internet, die Computer und ihre Benutzer). Dennoch tauchen solche Exe-Verkleinerungsfragen immer wieder in den Foren auf, eben, weil sie berechtigt sind. |
AW: Wie bekomme ich die exe kleiner?
Zitat:
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. |
AW: Wie bekomme ich die exe kleiner?
Kann man die RTTI (oder wie heißt das?) eigentlich einfach deaktivieren, wenn man sie nicht benötigt? Und wie viel ändert das an der Größe?
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
Zitat:
@Stevie :thumb: |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Warum 30 Listen weniger? Ich vergaß: TDictionary<TKey, TValue> hat intern Klassen, die von TEnumerable<TKey> und TEnumerable<TValue> ableiten, somit bekam man pro TDictionary<,> 3 neue TList<> Klassen (für TKey, TValue und TPair<TKey,TValue>) - wären also im besten Fall 42 mal TList<> weniger - einige Kombinationen sind aber noch wirklich als TList<> benutzt - z.B. wenn ein TDictionary als key TClass hat, denn TList<TClass> wird irgendwo benutzt. |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Die RTTI aus den vorcompilierten Units herauszubekommen, ist ein Kraftakt, der mal im Internet beschrieben war und den ich bei Delphi XE 2 sogar schaffte. Ausnahme: Aus den system.dcu(s) und den sysutils.dcu(s) war es nicht möglich, deren Quelltexte ließen sich nicht erneut compilieren. Macht deutlich was aus, die RTTI herauszulösen. |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Jedenfalls gibt's scheinbar sowas für Fahrrad und Motorradhelme inzwischen... |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Nur können bei komplett abgeschaltetem RTTI viele Dinge nicht mehr raus die früher rausgekonnt hätten, da der Compiler/Linker u.U. nicht mehr so leicht wissen kann, ob das Zeugs nicht doch zur Laufzeit dynamisch aufgerufen wird. Grüße TurboMagic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 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