Autor |
Beitrag |
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Fr 30.10.20 20:07
Hallo,
ich habe unter RADStudio (Delphi 10.3) ein Testprogramm gemacht um einzelne Stringfunktionen zu verstehen. Das Hauptform enthält ein TButton und ein TMemo, der Programmcode past auf etwa eine A4-Seite. Das Programm machte, was es soll. Durch Zufall habe ich gesehen, dass die EXE ca. 12 MB groß ist, meistens haben solche Kleinstprogramme um 2 MB. Ich habe keine Besonderheit in den Optionen finden können.
a) Ich habe die *.res gelöscht. Keine Änderung, die *.res wurd in gleicher Größe von 59 kB wieder erstellt.
b) Ich habe dann die *.dpr, *.pas, und *.dfm in ein neues Verzeichnis kopiert, RADStudio neu geöffnet dann mit Daten/Öffnen/Delphi-Projekt (*.dpr) das Projekt geladen und die EXE erzeugt. Diese läuft und ist nur 2,3 MB groß. Auffallend ist, dass die neue *.res Datei nur 2,4 kB groß ist gegenüber der alten *.res mit 59 kB.
c) Dann habe ich die alte Version geladen und den Linker die Segmentliste ausgeben lassen. Diese habe ich dann nach EXCEL gebracht und die Längen aller Segmente addiert: Das ergibt 2,1 MB.
Hat jemand eine Idee, wieso da ca. 10 MB hinzukommen und diese nicht in de Segmenttabelle ausgewiesen sind?
Viele Grüße
GuaAck
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 31.10.20 05:42
Vermutlich steht die Buildkonfiguration (in der Projektverwaltung rechts oben) auf Debug. Dann werden auch Debuginformationen mitgeliefert.
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Sa 31.10.20 19:54
Hallo Jaenicke,
das habe ich probiert und bei der Version "12MB-EXE" ist die Release-Version tatsächlich um 10 MB kleiner als die Debug-Version und nur 60 kB größer als die Version "2,4MB-EXE". Danke also für den Tipp. Erstaunlich aber: Bei der Version "2,4MB-EXE" sind die *.exe für Debug- und Release-Version exakt gleich groß. Und ich habe es probiert, in der Release-Version kann man keine Breakpoints setzen, das geht nur in der Debug-Version.
Ich habe dann mal die *.dproj miteinander verglichen (Version "12MB-EXE": 47 kB, Version "2,4MB-EXE": 6,7 kB). Der größte Unterschied ist, dass in der Version "12MB-EXE" noch jede Menge drin steht zu Android,iphone und wohl anderen System, die mir nichts sagen. Das wird die Ursache sein: Da habe ich wohl irgendwann mal versehentlich angewählt, dass ich was plattformübergreifendes machen will. Deshalb ist in der Debug-Version wohl alles drin. Die Release-Version kann ja nur für ein Betriebssystem gelten, also wird da der überflüssige Kram für andere Betriebssysteme entfernt. Das würde auch erklären, warum die *.res so groß ist, die Resourcen werden wohl auch für jedes Betriebssystem individuell sein.
Was meinst Du, könnte das etwa so sein? Für mich wäre das eine mehr als ausreichende Erklärung, weitere "Forschung" würde ich da nicht unternehmen.
Viele Grüße
Günter
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Sa 31.10.20 23:42
Nachtrag:
ich habe eben ein Minimalprogramm mit einem TButton und einem TMemo gemacht, bei Klick auf den Buttong wird das berühmte "Hello world" als Zeile in das Memo geschrieben. Diese Programm habe ich auf drei alternativen Wegen erstellt:
1. Datei/neu/Geräteübergreifende Anwendung
2. Datei/neu/Windows-VCL-Anwendung
3. Datei/öffnen/Delphi Project (*.dpr)
Die habe ich dann jeweils als Debug und Release erstellt.
Ergebnis: 1: 2: 3: 4: 5: 6:
| 1. Debug: *.EXE: 30 MB, *.RES: 59 kB, *.dproj: 47 kB Release: *.EXE: 9,2 MB, *.RES: 59 kB, *.dproj: 47 kB 2. Debug: *.EXE: 12 MB, *.RES: 59 kB, *.dproj: 46 kB Release: *.EXE: 2,4 MB, *.RES: 59 kB, *.dproj: 46 kB 3. Debug: *.EXE: 2,4 MB, *.RES: 2,5 kB, *.dproj: 6 kB Release: *.EXE: 2,4 MB, *.RES: 2,5 kB, *.dproj: 6 kB |
Damit scheint alles geklärt, genau das ist passiert: Meine bisherigen Delphi 7 - Programme habe ich über den Weg 1 umgestellt, nur das Testprogramm (12MB-EXE) habe ich neu über Weg 2 erstellt.
Bei dem Weg 2 sind in der *.dproj auch jede Menge Zeilen mit "Android" usw. enthalten. Unklar bleibt mir, wozu die zusätzlichen 10 MB gut sind.
Gruß
GuaAck
P.S.: Ich scheine eben eine falsche Taste erwischt zu haben, jedenfalls sieht es so aus, als ob ich die erste Hälfte dieses schon abgeschickt hätte, mal sehen.
Moderiert von Th69: Code-Tags hinzugefügt
Moderiert von Th69: doppelten Beitrag gelöscht
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 01.11.20 01:53
Liegt bei der kleinen Debug-Exe vielleicht daneben noch eine .tds Datei oder so? Vielleicht ist da eingestellt, dass die Debuginformationen in einer separaten Datei abgelegt werden sollen.
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: So 01.11.20 11:23
Nein, da ist nichts. Außer den Quellen *.dpr, *.pas,*.dfm und *.dproj gibt es nur *.res (2,4 kB), *.identcache (152 Bytes), *.local (52 Bytes) und die *.EXE (2,4 MB).
Ich habe auch c:\users nach *.tds durchsucht, nichts gefunden.
Für mich ist jetzt alles ok. 12 Mb sind ja heute auch kein Problem mehr und wenn ich es kompakter brauche, dann kann ich das jederzeit ganz schnell über den genannten Umweg ändern.
Vielen Dank für die Anregungen und das Löschen meines versehentlichen "Teilbeitrages",
viele Grüße
GuaAck
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mi 04.11.20 16:46
Ich habe hier etwas ähnliches. Unter XE2 war meine EXE release compiled 45MB groß. Nun unter RIO sind es 82MB! Release!
Übersetze ich debug version sind es 85MB. Da passt was nicht. Absolut nicht.
Noch krasser wird es bei einem der Plugins (dll). Das war unter XE2 6MB/15MB (release/debug) nun unter RIO sind es 38MB/120MB!
Diese kleine Dll wird jetzt also debug übersetzt sogar größer als das Hauptprogramm.
Ist mir aber egal. Was mich umtreibt sind die Größen unter release. Da ist beim Hauptprogramm ja nichtmal ein Unterschied zwischen Debug und Release.
Was ich mir nicht vorstellen kann dass DevExpress (wir sind von 18 unter XE2 auf 20 mit Umstieg auf RIO gewechselt) da jetzt fast 40 MB mehr verursacht. Das wäre schon etwas krass.
€Rechtschreibung ist etwas eingerostet.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Zuletzt bearbeitet von Sinspin am Mi 04.11.20 18:47, insgesamt 1-mal bearbeitet
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 04.11.20 17:02
Verwendest du denn "Runtime Packages" oder hast du alles in der Anwendung einkompiliert (bzw. hinzugelinkt)? s.a. Delphi HowTo: Runtime-Packages
Bei letzterem wird die EXE natürlich um so größer, je mehr Funktionalität du von den Packages benutzt (im Extremfall also alles).
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mi 04.11.20 18:58
Nein. Da sind keine Runtime Packages.
Das Plugin verwendet zwar ein paar Dialoge und die gleiche Funktionsbasis die es auch im Hauptprogramm gibt. Aber die da gibt es nur ein Fenster. Das Hauptprogramm hat mehr als 100.
Unter XE2 hat ja auch noch alles gepasst. Nur RIO lässt mich gerade etwas (ver)zweifeln. Die Dll wird regelmäßig erneuert und beim Programmstart aus dem Netzwerk geladen (wenn sie neu ist). Umso größer die ist um so länger muss der Nutzer warten.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 04.11.20 19:46
Wie groß (bzw. klein) wird denn die EXE, wenn du die "Runtime Packages" aktivierst?
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 04.11.20 21:05
Runtime Packages verkleinern zwar die Exe bzw. DLL, aber dafür muss man die Packages auch mitliefern und hat alle Nachteile, die BPLs nun einmal mitbringen (Performance, Abhängigkeiten, ...). Es gibt nicht umsonst den Begriff BPL Hölle.
Von daher ist das auch kein Allheilmittel.
Bei JCL/JVCL ist auch ein Unitanalyse-Tool dabei, das anzeigt welche Units mit welcher Größe einkompiliert werden. (Projekt --> Analyze project xyz)
Für diesen Beitrag haben gedankt: Sinspin
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 05.11.20 09:07
Das ist von mir ja auch nur als Test gedacht (um zu sehen, wie groß die EXE ohne externen Code wird)...
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 05.11.20 09:17
Wenn man die Runtime Packages denn einfach so aktiviert bekommt, kann man das natürlich machen. Das hat bei mir bei größeren Projekten aber leider nie ohne Probleme geklappt.
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 05.11.20 15:17
So ist es. Mein Projekt hat mehr als 500KZeilen im Hauptmodul. Und Komponenten von ein paar Herstellern. Ich habe das letzte mal vor 10 Jahren versucht mit BPL zu übersetzen. Eher ernüchternd als Erfolgreich.
JVCL habe ich hier nicht mit drauf. Wir verwenden DevExpress. Ich schaue mal ob ich das Tool isolieren kann und einzeln installieren oder ausführen.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Fr 06.11.20 18:08
Hallo,
ich habe das eben mit den Laufzeit-Packages probiert. Also: Neues VCL-Projekt (1 Button, 1 TMemo, bei Knopfdruck "Hello World" in Memo).
Option "Mit Laufzeit-Packages linken" = false: (War Standard bei allen Einstellungen bisher)
Release: 2,4 MB
Debug: 12,4 MB
Option "Mit Laufzeit-Packages linken" = true:
Release: 92 kB (ja, kilo...)
Debug: 2,5 MB
Den Text "Mit Laufzeitpackes linken" finde ich in bezug auf true und false für missverständlich.
Das zur Info,
viele Grüße
GuaAck
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.11.20 21:38
GuaAck hat folgendes geschrieben : | Den Text "Mit Laufzeitpackes linken" finde ich in bezug auf true und false für missverständlich. |
Mit Laufzeit-Packages linken bedeutet, dass der Linker die Laufzeit-Packages einbindet, du also die kompilierten Packages quasi wie DLLs mitliefern musst. Entsprechend wird das Kompilat deutlich kleiner. Was ist daran falsch?
|
|
GuaAck
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Fr 06.11.20 23:19
Hallo Jaenicke,
ich habe nicht geschrieben, dass es falsch sei, ich finde es missverständlich. Für mich bedeutet der Satz, dass Packages in die *.exe eingebunden werden und auf dem PC, auf dem das Programm ausgeführt wird, nicht vorhanden sein müssen. Deine - zutreffende - Interpretation ist auch logisch, wenn man den Satz als Gegenteil von "alle Packages linken" verteht. Wie gesagt, kann man falsch verstehen, habe ich eben.
Ich mache aber niemandem einen Vorwurf, die besten Textschreiber können nicht jede mögliche Fehlinterpretation vermeiden. Für mich wäre z. B. "Ohne Packages" klarer ("linken" ist entbehrlich, das ist ja die Rubrik). Wer weiß, wer das falsch verstehen würde.
Schönes Wochenende,
Gruß
GuuAck
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.11.20 08:14
Die Formulierung "Laufzeitpackages verwenden" wäre vermutlich am klarsten. Aber am sinnvollsten wäre wohl schlicht die Auswahl der Laufzeitpackages zu deaktivieren, wenn das Häkchen nicht gesetzt ist. Aber ich glaube nicht, dass an der Stelle Änderungen vorgenommen würden, da das schon ewig so ist.
In der Hilfe ist es übrigens noch einmal ausführlicher beschrieben.
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 07.11.20 09:31
Danke GuaAck,
daran sieht man, daß bei dir ca. 7,5 MB (~= 12,4 MB - 2,5 MB - 2,4 MB) alleine für die Debug-Infos der externen Packages einkompiliert werden (und ähnlich wird es dann bei dem Projekt von Sinspin sein).
Wenn man es genau wissen möchte, könnte ein "PE Viewer" hier helfen, z.B. PE Explorer (with "Special support for Delphi applications"!).
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Sa 07.11.20 11:24
Bei mir ist es witziger. Ich habe keine ernsthaften Größenunterschiede zwischen Debug und Release. Letzteres war bisher immer rund zwei drittel kleiner als Debug. Seit RIO ist das nicht mehr der Fall.
Bei einem meiner Plugins habe ich einen deutlichen Unterschied, wenngleich alles seit Umstieg auf RIO höllisch groß geworden ist. Andere Plugins mit nur einem Dialog habe ich bisher noch nicht getestet.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
|