Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einfluß auf die Größe der EXE-Dateien (https://www.delphipraxis.net/191483-einfluss-auf-die-groesse-der-exe-dateien.html)

kwhk 20. Jan 2017 12:35

Einfluß auf die Größe der EXE-Dateien
 
Hallo,
ich habe ein paar meine Oldi-Programme überarbeitet, damit sie auch unter Windows 10 laufen. Mal ein kleines Beispiel, mein Programm DateTime. Wenn man das in einem CMD-Fenster aufruft, dann werden Datum und Uhrzeit protokolliert, danach wird das Programm beendet.
Code:
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. Alle Rechte vorbehalten.

D:\Delphi10RAD\HK\DateTime>datetime
-------- Datum: 20.01.2017  ---  Tag: Freitag ------  Zeit: 13:27:18 ---------
Die erste Version habe ich vor vielen Jahren mit TASM gemacht, da wurde eine DateTime.COM erstellt, die war 381 Bytes lang.

Dann habe ich dieses Programm mit Delphi 3,5,6,7 gemacht. Mit Delphi 7 wird eine DateTime.exe erstellt, die ist 372.736 Bytes lang.

Nun habe ich mit RAD Studio 10.1 Berlin das gleiche Programm erzeugt (gleicher Source-Code wie bei Delphi 7), da wächst das Programm auf 2.153.984 Bytes.

Einen ähnlichen Effekt habe ich auch bei anderen Programmen bemerkt. EXE aus RAD-Studio 10.1 Berlin haben eine vielfache Dateigröße gegenüber der EXE-Dateien aus Delphi 7.

Habe ich da bei DEBUG o.ä. etwas nicht richtig eingestellt ?
DEBUG kann ich auch mit Delphi 7 machen.

jaenicke 20. Jan 2017 12:46

AW: Einfluß auf die Größe der EXE-Dateien
 
Es ist in den RTL- und VCL-Units eben sehr viel an Funktionalität dazugekommen, die der Linker nicht immer automatisch weglassen kann.

Man kann einiges aus den Exen entfernen, z.B. die RTTI Informationen, aber ganz klein ist es trotzdem nicht.

Eine minimale Kommandozeilenanwendung ist in Delphi 10.1 ca. 43 KiB groß. Mit System.SysUtils sind es dann schon 136 KiB. Mit DateUtils sind es dann 521 KiB.

Deine Exe-Größe lässt mich aber vermuten, dass du Vcl.Forms oder andere VCL-Units eingebunden hast. Denn erst damit kommt man sofort über 2 MiB (in der Release-Buildkonfiguration!). Oder du hast noch die Debug-Buildkonfiguration aktiv.

kwhk 20. Jan 2017 13:26

AW: Einfluß auf die Größe der EXE-Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es ist eine Konsolenanwendung. Ich hänge die mal als ZIP an, falls es interessiert. Für Hinweise wäre ich wirklich dankbar.

kwhk 20. Jan 2017 13:30

AW: Einfluß auf die Größe der EXE-Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
Eigentlich wollte ich das kleinere Trivial-Programm DateTime anhängen

Dalai 20. Jan 2017 14:02

AW: Einfluß auf die Größe der EXE-Dateien
 
Zitat:

Zitat von kwhk (Beitrag 1359392)
Es ist eine Konsolenanwendung.

Nö. In der DateTime.dpr sowie der DateTimeU.pas sieht man TForm1,
Delphi-Quellcode:
uses Forms
usw. Es ist also keine Konsolenanwendung, die auch als solche erstellt worden wäre.

Grüße
Dalai

a.def 20. Jan 2017 14:06

AW: Einfluß auf die Größe der EXE-Dateien
 
Konsolenanwendung Beispiel: http://docwiki.embarcadero.com/RADSt...lenanwendungen

t.roller 20. Jan 2017 14:11

AW: Einfluß auf die Größe der EXE-Dateien
 
Liste der Anhänge anzeigen (Anzahl: 1)
141 kB mit XE7
Delphi-Quellcode:
program Project1; //20170120

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

Var
  DatumZeit : TDateTime;
  ZeitDatum : TDateTime;
  DatumS   : String; // "tt.mm.jjjj"
  ZeitS    : String;
  WoTgNr   : Integer;
  TageS    : Array[1..7] of String;
  Meldung  : String;

begin
  try
  DatumS := 'tt.mm.jjjj';

  TageS[1] := 'Sonntag ---'; // je 12 Bytes
  TageS[2] := 'Montag ----';
  TageS[3] := 'Dienstag --';
  TageS[4] := 'Mittwoch --';
  TageS[5] := 'Donnerstag ';
  TageS[6] := 'Freitag ---';
  TageS[7] := 'Sonnabend -';

  DatumZeit := Date;
  ZeitDatum := Time;
  DatumS := DateToStr(DatumZeit);
  ZeitS := TimeToStr(ZeitDatum);
  WoTgNr := DayOfWeek(DatumZeit);

  Meldung := '-------- Datum: '+DatumS+' ---  Tag: '+TageS[WoTgNr]+'---  Zeit: '+ZeitS+' ---------'+#$07+#$0D+#$0A;

  WriteLn(Meldung);
  ReadLn; // eingefügt für Test

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

Uwe Raabe 20. Jan 2017 16:41

AW: Einfluß auf die Größe der EXE-Dateien
 
Als richtige Konsolenanwendung komme ich unter Berlin auf 145.920 Byte.

kwhk 21. Jan 2017 08:58

AW: Einfluß auf die Größe der EXE-Dateien
 
Ich bedanke mich für Eure Antworten. Mein Fehler war es offenbar, davon auszugehen, wenn man {$APPTYPE CONSOLE} einfügt, dass es damit eine Konsolenanwendung ist. Vom Ergebnis her ist es das ja auch.
Nun habe ich noch als Release compiliert - da ist die EXE nur noch halb so groß, wie bei D7 = 145.408 Bytes.

Ich habe einfach das D7-Projekt in D10 übernommen und die D7.dpr geöffnet, was ja auch funktioniert. Den Rest hat D10 gemacht.
Nun habe ich mit D10 eine leer Konsolenanwendung erstellt und in diese die PGM-Teile eingefügt - so ist es natürlich korrekter, macht aber etwas mehr Arbeit.

Nochmals vielen Dank.

---------- Ergänzung

Ich habe nun unter D7 auch noch einmal ein richtiges korrektes Konsolen-Projekt erstellt und neu compiliert. Da ist die EXE nur noch 47.616 Bytes groß.

dummzeuch 21. Jan 2017 12:45

AW: Einfluß auf die Größe der EXE-Dateien
 
Vielleicht interessant dazu, mein Blog Post ueber Delphi Console Applications von 2014 (aber immernoch aktuell):

https://blog.dummzeuch.de/2014/04/10...-applications/


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