Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Größe der *.exe (https://www.delphipraxis.net/215275-groesse-der-%2A-exe.html)

Runningdog 5. Jun 2024 15:08

Größe der *.exe
 
Hallo, habe ein altes Progrmm von vor gut zehn Jahren mit Delphi 11 überarbeitet. Nach dem Compilieren hat die exe rund 2,5 MB. Das ursprüngliche Programm mit Delphi 6 programmiert und compiliert hatte 750 KB. Wie kommt es, daß die exe nun plötzlich so viel größer ist und kann man das ändern?

Danke schon mal.

himitsu 5. Jun 2024 15:37

AW: Größe der *.exe
 
2-5 MB für eine VCL-Anwendung (10-15 MB mit Debuginfos)
und knapp unter 1 MB für eine Consolen-Anwendung
sind inzwischen eigentlich normal.

Aber heute habe ich auch 'nen Terrabyte an HDD (keine 30 MB mehr)
sowie 16 oder gar 64 GB RAM (nicht mehr nur 1 MB)
und 'nen Gigabit im Download (keine 56kbit).



Als Release kompilieren (ohne Debug-Infos) ... alternativ "mit externen TDS" für Debug

Dann kann man noch bei der RTTI so Einiges abschalten, aber nur was deine eigenen Units/Klassen betrifft.
Standardmäßig enthält die erweiterte RTTI jetzt auch PRIVATE, "falls" man auf Eigentschaften/Funktionen via RTTI zugreifen wöllte.
https://docwiki.embarcadero.com/RADS...ctive_(Delphi)

Ansonsten ist inzwischen auch viel mehr in der RTL und VCL drin, was auch noch dazu kommt.
Würde Vieles nicht in er INITIALIZATION initialisiert, sondern in CLASS-CONSTRUCTOR, dann könnte der Linker vieles weglassen, was nicht benutzt wird.
(steht es aber in INITIALIZATION drin, dann wird es benutzt, selbst wenn es "eigentlich" nicht benutzt wird)

Leider können ungenutzte Ressourcen vom Linker nicht entfernt werden, da er nicht weiß ob sie genutzt werden.
(es ist leider nicht möglich eine Ressource z.B. an eine Klasse oder Methode zu hängen, um die Einbindung davon abhängig zu machen, ob der Teil gelinkt wurde)
Wurde eine Unit sinnlos eingebunden und dann nicht benötigt, dann ist ihr Zeugs (INITIALIZATION und Ressourcen) dennoch mit drin und wiederum Das davon eingebundener Units usw.




Ich hab grade eben eine winzige Test-EXE erstellt, mit effektiv 20 Zeilen Code, und auf der Form 3 Panels, ein Memo und zwei Drag&Drop-Komponenten.
Delphi 11 -> 126 MB mit DebugInfos und 40 MB ohne. (leider enorm viele Abhängigkeiten, welche aber eigentlich nicht benutzt werden)

Sinspin 5. Jun 2024 16:20

AW: Größe der *.exe
 
Zitat:

Zitat von himitsu (Beitrag 1537503)
Ich hab grade eben eine winzige Test-EXE erstellt, mit effektiv 20 Zeilen Code, und auf der Form 3 Panels, ein Memo und zwei Drag&Drop-Komponenten.
Delphi 11 -> 126 MB mit DebugInfos und 40 MB ohne. (leider enorm viele Abhängigkeiten, welche aber eigentlich nicht benutzt werden)

Unser real world program mit 1.5M LOC, mit Debug Infos 207MB, ohne 86MB!
Das ist trotz krasser Frameworks nicht mehr sooo viel größer geworden. Wobei, da noch gut 300 MB in dll's und skin files drauf kommen die ich mit ausliefern muss, aber nicht von uns erstellt werden.

Wenn ich das mit meiner ersten großen Eigenentwicklung, in TPX7 vergleiche (118KB) .... auf der Diskette war noch viel Platz :lol:

Redeemer 6. Jun 2024 13:54

AW: Größe der *.exe
 
Zitat:

Zitat von himitsu (Beitrag 1537503)
Würde Vieles nicht in er INITIALIZATION initialisiert, sondern in CLASS-CONSTRUCTOR, dann könnte der Linker vieles weglassen, was nicht benutzt wird.
(steht es aber in INITIALIZATION drin, dann wird es benutzt, selbst wenn es "eigentlich" nicht benutzt wird)

Warum machen die das so und nicht "richtig"?

Rolf Frei 6. Jun 2024 13:56

AW: Größe der *.exe
 
Der Hauptgrund für die deulich grösseren Exe's liegt an den RTTI Daten. Leider lassen sich diese nicht vollumfänglich auschalten, wenn man keinen Bedarf dafür hat. Bei eigenen Units kann man folgenden Definition am Anfang in den Sourecode reinschreiben, wodurch dann für diese Unit keine RTTI Daten erzeugt werden. Da man das aber für die Delphi Basis-DCU's nicht machen kann, bringt das nur relativ wenig.
Delphi-Quellcode:
Unit ABC

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}

....
Hatte da mal bei meiner ca. 8 MB Exe bei allen Komponenten, die als Sourceversion besitze und von denen ich weiss, dass da kein RTTI benötigt wird, alle Units entsprechend angepasst und damit immerhin ca. 1.5 MB eingespart.

dummzeuch 6. Jun 2024 14:25

AW: Größe der *.exe
 
Zitat:

Zitat von Redeemer (Beitrag 1537525)
Zitat:

Zitat von himitsu (Beitrag 1537503)
Würde Vieles nicht in er INITIALIZATION initialisiert, sondern in CLASS-CONSTRUCTOR, dann könnte der Linker vieles weglassen, was nicht benutzt wird.
(steht es aber in INITIALIZATION drin, dann wird es benutzt, selbst wenn es "eigentlich" nicht benutzt wird)

Warum machen die das so und nicht "richtig"?

Weil dafür der RTL/VCL-Code überarbeitet und neu getestet werden müsste. Das ist viel Zeitaufwand, den keiner bezahlen will.

freimatz 7. Jun 2024 07:25

AW: Größe der *.exe
 
Zitat:

Zitat von himitsu (Beitrag 1537503)
Würde Vieles nicht in er INITIALIZATION initialisiert, sondern in CLASS-CONSTRUCTOR, dann könnte der Linker vieles weglassen, was nicht benutzt wird.
(steht es aber in INITIALIZATION drin, dann wird es benutzt, selbst wenn es "eigentlich" nicht benutzt wird)

Ist das auch so, wenn die Klasse in einer BPL ist? Dann weiss der Linker doch nicht ob jemand die braucht - oder?

Uwe Raabe 7. Jun 2024 08:38

AW: Größe der *.exe
 
Zitat:

Zitat von freimatz (Beitrag 1537545)
Ist das auch so, wenn die Klasse in einer BPL ist? Dann weiss der Linker doch nicht ob jemand die braucht - oder?

Das ist der Grund warum in einer BPL immer alle Units mit ihrem gesamten Code enthalten sind.

Runningdog 13. Jun 2024 06:56

AW: Größe der *.exe
 
Vielen Dank für die Antworten. Jetzt muß ich nur noch herausfinden, wo man beim Compilieren die Häkchen wegnehmen muß. Eigentlich programmiere ich schon seit vielen Jahren nicht mehr, mußte nur einen Fehler in einem alten Programm beheben...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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