AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Größe der *.exe

Ein Thema von Runningdog · begonnen am 5. Jun 2024 · letzter Beitrag vom 13. Jun 2024
Antwort Antwort
Runningdog

Registriert seit: 9. Jan 2024
11 Beiträge
 
#1

Größe der *.exe

  Alt 5. Jun 2024, 16:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: Größe der *.exe

  Alt 5. Jun 2024, 16:37
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Jun 2024 um 16:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
677 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Größe der *.exe

  Alt 5. Jun 2024, 17:20
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
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Größe der *.exe

  Alt 6. Jun 2024, 14:54
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"?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Größe der *.exe

  Alt 6. Jun 2024, 14:56
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.

Geändert von Rolf Frei ( 6. Jun 2024 um 15:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.603 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Größe der *.exe

  Alt 6. Jun 2024, 15:25
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.
Thomas Mueller
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.443 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Größe der *.exe

  Alt 7. Jun 2024, 08:25
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#8

AW: Größe der *.exe

  Alt 7. Jun 2024, 09:38
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Runningdog

Registriert seit: 9. Jan 2024
11 Beiträge
 
#9

AW: Größe der *.exe

  Alt 13. Jun 2024, 07:56
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...

Geändert von TBx (14. Jun 2024 um 07:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz