Falls Ihr auch schonmal den Fall hattet, dass eure Exe einfach zu groß ist und Ihr diese verkleinern möchtet, damit sie z.B. auf eine Diskette passt, dann habe ich hier ein paar Tipps für euch:
1.) Mit Icarus kann man bei Delphi-Projekten nach ungenutzen Units suchen und diese anschließend entfernen, um dadurch die Exe zu verkleinern:
http://www.peganza.com/products_icarus.htm
2.) Eine weitere Möglichkeit ist die Relocation-Tabelle aus einer Exe zu löschen, die in den meisten Projekten nicht benötigen wird. Delphi packt diese immer in die Exe rein.
Hierfür kann man z.B. StripReloc benutzen:
http://www.innosetup.com/striprlc.php
3.) Natürlich kann man auch die BPL-Dateien auslagern.
Diese werden dann beim Start des Projekts geladen und sind nicht in der Exe-Datei mit reingepackt.
Vor allem, wenn man mit vielen verschiedenen Komponentensammlungen arbeitet, ist dies eine gute Möglichkeit die Exe-Datei kleiner zu bekommen.
4.) Image-Dateien extern auslagern und erst in den Speicher laden, sobald sie angezeigt werden sollen.
Eine von uns bisher eingesetzte Methode, die ich allerdings inzwischen nicht mehr empfehle, wäre Exe-Packer wie ASPack oder UPX zu verwenden.
Dies ist zwar sehr effektiv um die Exe-Datei kleiner zu bekommen, bringt aber auch Nachteile ( gefunden bei dem Link von StripReloc ):
- Upon startup of a compressed EXE/DLL, all of the code is decompressed from the disk image into memory in one pass, which can cause disk thrashing if the system is low on memory and is forced to access the swap file.
In contrast, with uncompressed EXE/DLLs, the OS allocates memory for code pages on demand (i.e. when they are executed).
- Multiple instances of a compressed EXE/DLL create multiple instances of the code in memory.
If you have a compressed EXE that contains 1 MB of code (before compression) and the user starts 5 instances of it, approximately 4 MB of memory is wasted.
Likewise, if you have a DLL that is 1 MB and it is used by 5 running applications, approximately 4 MB of memory is wasted.
With uncompressed EXE/DLLs, code is only stored in memory once and is shared between instances.
