![]() |
AW: Wie bekomme ich die exe kleiner?
Danke für die Diskussion und das viele Wissen in alle Richtungen.
Ohne jetzt die Dinge bis aufs Letzte auszuquetschen: Die Letztfassung ist geschrumpft von ca 19 MB auf ca 6 MB+, also auf ca 1/3. |
AW: Wie bekomme ich die exe kleiner?
Und mit was? Und wozu eigentlich?
|
AW: Wie bekomme ich die exe kleiner?
Ich würde einfach auf Release stellen. Das reicht vollkommen. Die paar MB sind heute doch total egal. Windows-Phones sind eh am aussterben und das Datenvolumen über solche Handys somit auch :stupid:
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
Die Zips werden im Gegenteil sogar deutlich kleiner, wenn man z.B. zwei unkomprimierte Exen oder eine unkomprimierte Exe und eine unkomprimierte DLL einpackt, als wenn man diese vorher mit einem solchen Exe-Packer komprimiert! Das ist ja auch logisch, denn viele Teile von zwei in Delphi erstellten Anwendungen sind ähnlich. Man denke nur an die ganzen System-Units usw., die einkompiliert sind. Wenn man diese aber packt, kann ein Zip-Tool diese nicht mehr so gut zusammenfassen. Beispiel: Unsere Kassenanwendung und die zugehörige Backoffice-Anwendung. Unkomprimiert 57,7 und 61 MiB groß, komprimiert mit Aspack 11,7 und 12,2 MiB.
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
Aber eine Exe-Verkleinerung über einen Exe-Packer ist doch ohnehin gemogelt und mithin die unseriöseste Dateiverkleinerung. Deshalb nannte ich diese Möglichkeit auch zuletzt und nur in Kammern. Der guten Nicole Wagner ging es vermutlich auch und womöglich zuvörderst darum, die Exedatei wirklich zu verkleinern. Sosehr ich Pascal liebe und mit Delphi und Lazarus gern programmiere, sosehr hat mich die zunemende Verfettung ihrer Compilate im Verlaufe der Versionsfortschritte immer gestört. Echt kleine Exedateien, und dann noch hochkomprimiert über zip, rar, 7zip (und noch besseres) sind das kleinste überhaupt und am ressourcenschonendsten auf Permanentspeichern! |
AW: Wie bekomme ich die exe kleiner?
Moin...8-)
[nur meine Meinung] Zitat:
[/nur meine Meinung] |
AW: Wie bekomme ich die exe kleiner?
Zitat:
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. |
AW: Wie bekomme ich die exe kleiner?
Zitat:
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. |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Sherlock |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Von daher mag das zwar leicht erscheinen, ist es aber nicht... |
AW: Wie bekomme ich die exe kleiner?
Zitat:
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. |
AW: Wie bekomme ich die exe kleiner?
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) 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. |
AW: Wie bekomme ich die exe kleiner?
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?
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
Zitat:
@Stevie :thumb: |
AW: Wie bekomme ich die exe kleiner?
Zitat:
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. |
AW: Wie bekomme ich die exe kleiner?
Zitat:
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. |
AW: Wie bekomme ich die exe kleiner?
Zitat:
Jedenfalls gibt's scheinbar sowas für Fahrrad und Motorradhelme inzwischen... |
AW: Wie bekomme ich die exe kleiner?
Zitat:
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 |
AW: Wie bekomme ich die exe kleiner?
Zitat:
per Unit kannst du zumindest Teile davon auch abschalten. Du kanst dir sogar raussuchen welche. Icxh weiß nur nicht mehr auswendig wie das Stichwort dazu lautet. Es gibt aber eine Direktive die man an den Anfang der Unit schreibt. Grüße TurboMagic |
AW: Wie bekomme ich die exe kleiner?
Zitat:
|
AW: Wie bekomme ich die exe kleiner?
Zitat:
- die Änderung für TEnumerable<T>.ToArray hab ich an einen Entwickler kommuniziert und das wird wohl in 10.4 drin sein (10.3.x ging nicht, da breaking change). - RTTI ausschalten werden sie nicht machen, da dann der ganze JSON und sonstiges jegliches Serialisieren nicht mehr funktioniert. - die Änderungen in System.Generics.Defaults, die ich gemacht habe sind auch Breaking changes (TComparer<T> und TEqualityComparer<T> auf record geändert, so dass dort weniger unnötiger Code erstellt wird) |
AW: Wie bekomme ich die exe kleiner?
Wird als Optimierung intern auch der selbe Code verwendet, wenn die Typen quasi kompatibel sind, bzw. wo praktisch der selbe Assembler-Code entsteht?
z.B. TDictionary für Byte, ShortInt, PAnsiChar, Boolean, ByteEnum usw. Und warum nicht die meiste RTTI aus, wenn sie fast niegendwo verwendet wird? Die Objekte/Typen, welche Serialisiert werden sollen, da ist es keinerlei großer Aufwand, wenn die Entwickler das dort gezielt aktivieren. Aber gut, es war auch schonmal witzig per RTTI bissl durch die IDE zu enumerieren, obwohl dort leider doch bei dem Einen oder Anderen die RTTI deaktiviert wurde. :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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