AGB  ·  Datenschutz  ·  Impressum  







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

Wie bekomme ich die exe kleiner?

Ein Thema von NicoleWagner · begonnen am 27. Jan 2020 · letzter Beitrag vom 8. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Stevie
Stevie

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

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 11:20
Moin...
[nur meine Meinung]
Zitat:
im Verlaufe der Versionsfortschritte
... versuch mal im Autohaus ein neues Auto zu bekommen was keinen Airbag hat. Es ist deine Entscheidung ob du mit einem Golf Bj.67 fährst oder die modernen Sprachfeatures nutzt.
[/nur meine Meinung]
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.
Um mal beim hinkenden Autobeispiel zu bleiben, ist das so, als ob du immer im Kofferraum und auf dem Dachgepäckträgger Wasser- und Wintersportausrüstung transportierst, egal wo du hinfährst.

Es ist ein großer Unterschied, ob man die Kosten für eine Funktionialität, die man auch nutzt, trägt, oder sie auch trägt, obwohl man sie überhaupt nicht benutzt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 11:36
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.895 Beiträge
 
Delphi 12 Athens
 
#3

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
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

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
 
#5

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.895 Beiträge
 
Delphi 12 Athens
 
#6

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
AppCentral
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#7

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.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

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
TurboMagic

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

AW: Wie bekomme ich die exe kleiner?

  Alt 7. Feb 2020, 19:39
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.
Gibt's für diese Ideen schon QP feature requests?
  Mit Zitat antworten Zitat
Delphi-Laie

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

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
Antwort Antwort
Seite 1 von 2  1 2      


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 09:34 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