Comment atteindre la petite taille de l'exécutable?

très récemment, je suis revenu à Delphi après une longue pause et j'ai écrit une application utilitaire assez simple que mon client a demandé pour supporter une version plus ancienne...

je sais que ces jours-ci la taille n'importe pas beaucoup, mais il m'a frappé comme étrange que l'application d'une unité, une fois compilé, s'élevait à 1'084'416 B exécutable. Le seul et unique .pas d'unité, j'ai écrit certains de 20,8 k grand, principalement en raison de la richesse de l'interface graphique.

le La clause uses est la suivante:

uses
  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms, strutils,
  Dialogs, ADODB, DB, DBGrids, ExtCtrls, DBCtrls, StdCtrls, Grids, Menus,
  Buttons;

je me demande s'il n'y a pas moyen de réduire la taille de l'application à 300-400k ou moins?

13
demandé sur Peter Perháč 2010-01-27 23:31:03

8 réponses

  1. avez-vous fait un debug ou un release build? (Il la libération de plus petite taille, assurez-vous que l'optimisation est activée, les informations de débogage désactivé)

  2. avez-vous éteint RTII (delphi 2010 et plus) si non nécessaire? (Plus petites tailles EXE.)

  3. nombre d'unités dans votre clause d'utilisation de votre unité principale, n'est pas une bonne façon de deviner la taille EXE. Pensez-y de cette façon: La CLASSIFICATION elle-même est une grande quantité de code, la couche de base de données une autre, et les choses que vous écrivez est probablement un très petit pourcentage de la taille EXE.

  4. pour comprendre la taille de votre exécutable, essayez L'Analyseur de projet JCL, ou lisez le fichier MAP qui est produit lorsque vous activez l'option Map. Cela vous dira exactement ce qui est à l'intérieur de votre fichier exécutable.

ce serait idiot pour diverses raisons, mais vous pourriez obtenir un plus petit exécutable en utilisant Delphi 7, par exemple. À la fin, quand je fais une demande et je veux le rendre plus petit, je regarde combien de temps et comment beaucoup d'efforts pour tout reconstruire (comme avec un vcl alternative) et je puis dire à moi-même, de l'oublier.

17
répondu Warren P 2017-02-02 13:38:08

vous pouvez essayer d'utiliser KOL (Key Objects Library est un ensemble d'objets pour développer la puissance (mais petit ) applications GUI de Windows 32 bits en utilisant Delphi mais sans VCL). KOL permet de créer des applications GUI Windows32 très compactes (à partir de ~11K sans compression - si suggéré de remplacement des unités système utilisé). La majeure partie du code est convertie en assembleur intégré.

alt texte http://kolmck.net/KOLLogo5.gif

une autre option est d'utiliser un compresseur exe comme UPX

alt texte http://upx.sourceforge.net/images/upx12.png

12
répondu RRUZ 2014-05-29 19:15:29

MapFileStats (DelphiTools.info) est un bon outil (gratuit) qui vous permet de voir combien d'Espace chaque unité occupe dans votre exécutable. Mon propre outil DelphiUnitSizes est une alternative qui, en plus des tailles unitaires, affiche également la taille de chaque fonction ou classe.

Delphi 2010 a rendu l'exécutable par défaut environ 30% plus grand, probablement en raison de RTTI inclus dans les unités RTL/VCL, de sorte que vous pouvez utiliser une version plus ancienne de Delphes pour les petits exe-size.

comme d'autres l'ont mentionné UPX est un grand outil aussi, les faux positifs par les virusscanners ne sont pas si fréquents dans mon expérience.

la taille des exécutables Delphi peut être considérablement réduite en utilisant des unités-système personnalisées et la compression UPX. Je peux générer des exe-fichiers qui sont moins que 64kb de taille avec mon Delphi-basé jeu-Générateur ZGameEditor , même avec Delphi Berlin.

8
répondu Ville Krumlinde 2017-02-03 08:31:12

Quelle est la taille de votre DFM? Il est inclus comme ressource dans votre EXE. Selon la complexité de votre interface graphique, vous pourriez trouver que la création de l'interface graphique à l'exécution en code pourrait réduire la taille de EXE.

6
répondu Jim McKeeth 2010-01-27 21:42:41

vous pouvez également considérer d'ajouter la ligne suivante en haut du dossier de projet:

{$SetPEFlags 1}

explication ici: http://hallvards.blogspot.fr/2006/09/hack12-create-smaller-exe-files.html

3
répondu philnext 2012-12-14 14:54:45

Oui, mais vous devez fournir les autres unités de code comme fichiers supplémentaires. Tout comme .net avait besoin de l'assemblage, et vous avez des temps D'exécution VB, etc. C'est juste le Delphi runtime, mais il est intégré dans l'exe.

une autre option est de compresser l'exécutable, il y a des outils pour cela.

2
répondu Lucero 2010-01-27 20:35:09
  • vous dites que vous revenez à Delphi. Si vous disposez d'une ancienne version est disponible, utilisez - chaque nouvelle version ajoute des fonctionnalités supplémentaires et si vous n'en avez pas besoin votre ex sera plus petite sans eux.

  • assurez-vous que vous n'incluez que les unités que vous utilisez réellement.

mais quoi que vous fassiez, je doute que vous descendiez à 300k. Si ma mémoire est bonne, même un bonjour l'application mondiale dans Delphi 2 serait plus large que cela.

1
répondu Mike Sutton 2010-01-29 19:22:18

avez-vous des fichiers de ressources ou d'images qui sont liées dans le projet?

je pense que L'ADODB inclut aussi tout à fait certains frais généraux. Si votre application utilise vraiment une base de données alors un simple 1MB n'est pas trop mauvais pour la taille du fichier? N'oubliez pas que votre application est juste cette exe-pas besoin de dll supplémentaire, etc

0
répondu Birger 2010-01-28 10:35:17