Entwickler-Ecke

Sonstiges (Delphi) - EXE-Größen bei Delphi 10


Mathematiker - So 28.08.16 13:14
Titel: EXE-Größen bei Delphi 10
Hallo,
nachdem ich es geschafft habe, ein paar alte D5-Texte unter Delphi 10 zu compilieren, ergibt sich für mich ein kleines Problem.
Die EXE-Dateien sind unter Delphi 10 fünfmal(!) so groß im Vergleich zu Delphi 7. Ist das normal, oder habe ich etwas falsch gemacht?

2 Beispiele:
D7: 402 k ... Delphi 10: 2188 k
D7: 434 k ... Delphi 10: 2376 k

Beste Grüße
Mathematiker


Lelf - So 28.08.16 13:21

Darüber habe ich mich auch schon sehr gewundert.

Lelf


gerd8888 - So 28.08.16 13:22

Hallo Mathematiker,

ich glaube das ist (leider) normal. Das ist bei mir auch so.

Gerd


WasWeißDennIch - So 28.08.16 13:55

What Can I Do To Reduce My Executable's Size (Delphi)? [http://stackoverflow.com/questions/3199476/what-can-i-do-to-reduce-my-executables-size-delphi]
Es macht schon einen riesigen Unterschied, ob man in der Debug- oder der Release-Konfiguration kompiliert, ob die erweiterte RTTI eingebunden wird, etc.


jaenicke - So 28.08.16 15:30

Zunächst stellt sich die Frage warum das ein Problem ist. Ich meine heute müssen Programme ja nicht mehr auf eine Diskette passen usw.

Bei den genannten Exe-Größen bist du jedenfalls schon im Release-Build vermute ich (denn im Debugmodus sind die bei einem leeren Projekt etwas über 10 MiB groß). Viel kleiner geht also kaum mit einfachen Mitteln.

Gründe für die Größe gibt es einige:
Die RTTI kann man entfernen, wenn man sie nicht braucht, dann kommt man im Release-Build eines leeren VCL-Projekts statt auf 2154 KiB auf 1736 KiB.
Etwa 50 KiB entfallen auf das Icon.

Viel mehr geht nicht so einfach. Ich würde auch nicht empfehlen mit solchen Tricks anzufangen. Die Größe einer Exe ist heutzutage in 99,9% der Fälle schlicht irrelevant.

Anders sieht es im mobilen Bereich aus. Da sind die großen Apps von Delphi nicht so angenehm.


Delphi-Laie - So 28.08.16 17:56

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Zunächst stellt sich die Frage warum das ein Problem ist. Ich meine heute müssen Programme ja nicht mehr auf eine Diskette passen usw.


1. Die Quota(s) für die Anhänge haben sich nach meiner Beobachtung in diversen Delphiforen seit Jahren nicht verändert, jedenfalls nicht offiziell.
2. Das ist ganz einfach eine Frage der Eleganz und der "Sauberkeit" des Quellcodes, möglichst kleine Compilate zu bewirken. Gut, man könnte es auch wie Luckie mit Non-VCL auf die Spitze treiben....

Mathematiker, hier im Schnelldurchlauf die Möglichkeiten, die Delphi-Compilatsgrößen zu verringern:

1. NonVCL
2. Nicht benötigte Units entfernen
3. benötigte Units abspecken, ggf. nur benötigten Code extrahieren und entsprechende Unit(s) entfernen
4. Debuginformationen in Compiler/Linker entfernen:
Projekt -> (Standard)Optionen -> Compiler
Haken bei
- Optimierung an
- bei [Laufzeitfehler] und [Debuggen] alles weg
5. Wohl in Projektdatei: RTTI:
{$weaklinkrtti on}
{$rtti explicit methods([]) properties([]) fields([])}
6. KOL-(System-)Units verwenden
7. Möglichst kleine / frühe Delphiversion verwenden
(8. upx)
9. Laufzeittypinformationen aus möglichst vielen eingebundenen Units entfernen: http://www.zipplet.co.uk/index.php/content/articles_programming_delphi2010rtti (funktionierte bei mir zumindest bei XE2, höheres Delphi habe ich nicht).


Delphi-Laie - Sa 03.09.16 16:30

Interessanterweise wirkt sich das:

4. Debuginformationen in Compiler/Linker entfernen:
Projekt -> (Standard)Optionen -> Compiler
Haken bei
- Optimierung an
- bei [Laufzeitfehler] und [Debuggen] alles weg

nur auf die Größe der compilierten Units, also auf die DCU-Dateien aus (ist zumindest bei Delphi 7 so). Die Größe der EXE-Dateien scheint sich davon nicht beeindrucken zu lassen. Anscheinend entfernt der Delphi-Compiler - unabhängig von den Einstellungen, wie die genannten Optionen (de)aktiviert sind - beim Linken (was ja genaugenommen kein Compilieren mehr ist) diese Informationen in jedem Falle. Insofern erstaunt mich die hohe Übersetzungsgeschwindigkeit.