AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Wie bekomme ich die exe kleiner?

Wie bekomme ich die exe kleiner?

Ein Thema von NicoleWagner · begonnen am 27. Jan 2020 · letzter Beitrag vom 8. Feb 2020
Antwort Antwort
Seite 6 von 7   « Erste     456 7   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.287 Beiträge
 
Delphi 11 Alexandria
 
#51

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 17:26
Aber dennoch Stimme ich bei Delphi zu, wenn eine .exe erzeugt wird, muss nicht alles rein. Gerade bei Software könnte man beim erzeugen "intelligent abspecken" (alles raus was nicht benötigt wird) bzw. "intelligent packen" (nur rein was auch zusätzlich gebraucht wird). Zumindest wäre dies meine Erwartungshaltung.
Wenn alles drin wäre, wären die Anwendungen noch deutlich größer. Das Problem ist einfach, dass man nicht unbedingt etwas direkt ansprechen muss, es aber dennoch benutzen kann. Wenn man eine Methode über die RTTI über den Namen anspricht, wäre es halt doof, wenn der Compiler diese nicht mit kompiliert hätte, weil sie ansonsten nicht verwendet wird.

Von daher mag das zwar leicht erscheinen, ist es aber nicht...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#52

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 17:28
Aber dennoch Stimme ich bei Delphi zu, wenn eine .exe erzeugt wird, muss nicht alles rein. Gerade bei Software könnte man beim erzeugen "intelligent abspecken" (alles raus was nicht benötigt wird) bzw. "intelligent packen" (nur rein was auch zusätzlich gebraucht wird). Zumindest wäre dies meine Erwartungshaltung.
Eben - meine auch!

Delphi hat bis heute einen sehr schnellen Compiler. Zum einen, weil der wohl nur einen Durchgang benötigt, zum anderen wirkt da wohl noch die Zeit, als Turbopascal in Maschinencode programmiert wurde, nach (waren das noch Zeiten sehr guter Softwarequalität, ich denke da auch an WordPerfect und Geoworks Ensemble!).

Doch für die Größe der Compilate wurde entweder wenig bis gar nichts oder jedenfalls wohl nicht so viel Entwicklungsarbeit wie in andere Dinge gesteckt- leider. Einzige Ausnahme, die ich bislang wahrnahm: Von Delphi 6 auf Delphi 7 kann es tatsächlich sogar kleiner werden.

Die von jaenicke genannten Datei-/Projektgrößen wirken zunächst einmal erschlagend. Keine Ahnung, wieviele Compilate diese Gesamtgröße verursachen.

Ja, und natürlich ist mir klar, daß 64 Bit per se größere Compilate als 32 Bit verursachen muß, das war schon beim Übergang von 16 auf 32 Bit so und natürlich auch, als der Standard von Konsole auf Windows visuelle Komponentne umgestellt wurde. Außerdem bin ich mir sicher, daß andere Programmiersprachen ebenfalls mit diesem Phänomen zu kämpfen haben (oder eher das Internet, die Computer und ihre Benutzer).

Dennoch tauchen solche Exe-Verkleinerungsfragen immer wieder in den Foren auf, eben, weil sie berechtigt sind.

Geändert von Delphi-Laie ( 7. Feb 2020 um 17:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#53

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 17:49
Von daher mag das zwar leicht erscheinen, ist es aber nicht...
Doch ist es - es hat nur keine Priorität. Teil der immer größer werdenden Binaries sind auch zu einem signifikanten Teil die Generics, die in den Standardbibliotheken genutzt werden aber vom Compiler nicht eingedampft werden.

Eine leere VCL Anwendung in Delphi 10.3.3 auf Release ist bei mir knappe 2.4MB groß.
Davon sind über 800KB nur Code aus Generics:
59 verschiedene TList<> (ca 400KB)
14 verschiedene TDictionary<,> (ca 120KB)

Von den Listen könnte es 14 weniger geben, wenn man nicht so dämlichen Code in TEnumerable<T>.ToArray schreiben würde, wie derzeit der Fall ist. Denn das sorgt dafür, dass auch für ein TDictionary<TFoo,TBar> eine TList<TPair<TFoo,TBar>> kompiliert wird, die vermutlich niemals nicht benutzt wird.

Und von den dann noch übrig beleibenden 45 Listen könnten grob überschlagen über die Hälfte einfach auf TList<TObject> eingedampt werden, da es alle TList<T> sind, wo T eine Klasse ist.

Bei einer FMX Anwendung sieht das ganze übrigens noch weitaus schlimmer aus. Wenn man dann noch Drittanbieter Komponenten nutzt, die mit wachsender Begeisterung die RTL Collections nutzen, zieht man sich noch mehr unnützen Klump rein.

Im übrigen ist das meiste des Codes, den so eine TList<T> in der Binary verursacht sogar Code der niemals durchlaufen wird, da sie für Aufrufe inlined werden - aber da nunmal für jeden RTL Typ RTTI angeschaltet ist, kann der Linker sie nicht rauswerfen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 7. Feb 2020 um 18:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#54

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 18:19
Kann man die RTTI (oder wie heißt das?) eigentlich einfach deaktivieren, wenn man sie nicht benötigt? Und wie viel ändert das an der Größe?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.287 Beiträge
 
Delphi 11 Alexandria
 
#55

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 18:31
Kann man die RTTI (oder wie heißt das?) eigentlich einfach deaktivieren, wenn man sie nicht benötigt? Und wie viel ändert das an der Größe?
Das ändert aber nichts daran, dass sie in den Systembibliotheken aktiv ist. Zudem verwenden wir z.B. diese Funktionalitäten auch aktiv (eigene Skriptsprache, ...).
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#56

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 18:44
Zitat:
Eine leere VCL Anwendung in Delphi 10.3.3 auf Release ist bei mir knappe 2.4MB groß.
Davon sind über 800KB nur Code aus Generics:
59 verschiedene TList<> (ca 400KB)
14 verschiedene TDictionary<,> (ca 120KB)
Deshalb ist Delphi auch so beliebt
Zitat:
Und wie viel ändert das an der Größe?
200 -> 300KB

@Stevie

Geändert von venice2 ( 7. Feb 2020 um 18:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#57

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 19:27
Kann man die RTTI (oder wie heißt das?) eigentlich einfach deaktivieren, wenn man sie nicht benötigt? Und wie viel ändert das an der Größe?
RTTI für System.Generics.Collections ausgeschalten, TEnumerable<T>.ToArray virtual abstract gemacht und noch ein paar kleinere Anpassungen in System.Generics.Defaults -> 1.6MB, davon 134KB durch Generics (14 TDictionary<,> und 29 TList<>).

Warum 30 Listen weniger? Ich vergaß: TDictionary<TKey, TValue> hat intern Klassen, die von TEnumerable<TKey> und TEnumerable<TValue> ableiten, somit bekam man pro TDictionary<,> 3 neue TList<> Klassen (für TKey, TValue und TPair<TKey,TValue>) - wären also im besten Fall 42 mal TList<> weniger - einige Kombinationen sind aber noch wirklich als TList<> benutzt - z.B. wenn ein TDictionary als key TClass hat, denn TList<TClass> wird irgendwo benutzt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 7. Feb 2020 um 19:37 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#58

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 19:32
Kann man die RTTI (oder wie heißt das?) eigentlich einfach deaktivieren, wenn man sie nicht benötigt? Und wie viel ändert das an der Größe?
In der Projektdatei gibt es dafür eine Option (siehe meinen ersten Beitrag in dieser Diskussion).

Die RTTI aus den vorcompilierten Units herauszubekommen, ist ein Kraftakt, der mal im Internet beschrieben war und den ich bei Delphi XE 2 sogar schaffte. Ausnahme: Aus den system.dcu(s) und den sysutils.dcu(s) war es nicht möglich, deren Quelltexte ließen sich nicht erneut compilieren.

Macht deutlich was aus, die RTTI herauszulösen.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#59

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 19:33
Moin...
[nur meine Meinung]
Zitat:
im Verlaufe der Versionsfortschritte
... versuch mal im Autohaus ein neues Auto zu bekommen was keinen Airbag hat.
Das nennt man Motorrad, kenne die Fachbegriffe.

Sherlock
Ähm, gab's nicht von irgend einem hersteller nicht auch schon mal einen Airbag für's Motorrad?
Jedenfalls gibt's scheinbar sowas für Fahrrad und Motorradhelme inzwischen...
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#60

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 19:35
Es ist ein kleiner Unterschied, ob du etwas bekommst, was du nur im Notfall (dann aber auf jeden Fall) benötigst, oder ob du immer alles dabei gepackt bekommst, was du nicht brauchst.
Bezogen auf das Autobeispiel: Das ist fast immer so, das du Sachen dazu bekommst die du durch die Gegend fährst obwohl du es niemals brauchst (ob Notfall oder nicht). Und wenn es nur der Überdimensionierte Motor (und alles was dann damit zusammenhängt) ist, weil man eine höhere Ausstattung haben möchte um die komplette Sicherheitsausstattung zu bekommen... diese aber nur mit dem größten Motor zu haben ist.


Aber dennoch Stimme ich bei Delphi zu, wenn eine .exe erzeugt wird, muss nicht alles rein. Gerade bei Software könnte man beim erzeugen "intelligent abspecken" (alles raus was nicht benötigt wird) bzw. "intelligent packen" (nur rein was auch zusätzlich gebraucht wird). Zumindest wäre dies meine Erwartungshaltung.
Naja, ein Stück weit speckt der Compiler/Linker schon ab. Nennt sich Smartlinking.
Nur können bei komplett abgeschaltetem RTTI viele Dinge nicht mehr raus die früher rausgekonnt hätten,
da der Compiler/Linker u.U. nicht mehr so leicht wissen kann, ob das Zeugs nicht doch zur Laufzeit
dynamisch aufgerufen wird.

Grüße
TurboMagic

Geändert von TurboMagic ( 7. Feb 2020 um 19:39 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:18 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