Delphi Xe Disable Rtti
-
09-10-2019 - |
Question
J'ai utilisé Delphi Xe récemment mais la taille EXE est très grande à cause de RTTI (je pense)
How to supprimer rtti, et puis-je rendre ma taille d'application aussi petite que l'application Delphi 2009 (490 Ko) sans comptssion; Et quelle est l'utilisation de RTTI
La solution
En bref (histoire complète fournie par des liens dans la réponse de Splash):
{$ Rtti Méthodes explicites ([]) Propriétés ([]) champs ([])}
Notez que À partir de XE6 et plus récente, cela doit être dans chaque unité individuelle pour laquelle vous souhaitez désactiver RTTI. Avant cela (XE5 et ci-dessous), il pourrait être dans le fichier DPR et s'appliquerait à toutes les unités du projet.
Autres conseils
Lis le Aide en ligne pour Delphi ...
... et chercher Débordement de pile:
- Pourquoi devrais-je me soucier de RTTI à Delphi?
- Utilisation pratique pour le nouveau RTTI de Delphi
Gardez à l'esprit que le $RTTI
La directive doit être incluse dans tous unité où elle devrait prendre effet. Voir Comment puis-je définir la directive $ rtti pour l'ensemble du projet?
Votre problème n'est pas lié à RTTI. Si vous parlez d'une augmentation relativement faible (100-200k), cela est dû à des fonctions supplémentaires dans RTL (ajoutée pour le support Unicode, etc.). Si vous obtenez une augmentation de 500 à 700k environ, vérifiez si vous liez les unités d'interface utilisateur VCL (formulaires, contrôles, etc.). Si vous obtenez une augmentation de 3 Mo, vous avez allumé des symboles de débogage supplémentaires.
C'est parce que certaines fonctionnalités génériques ont été ajoutées aux unités SYS. Des génériques ont été ajoutés en 2009, mais dans les unités de systèmes, certaines classes ont été réécrites avec des génériques dans XE et XE2. A mon humble avis
Ajoutez ces drapeaux pour réduire la taille Dans le fichier DPR (projet> Voir la source) à chaque unité individuelle (à partir de XE5) *.
{$SETPEFlAGS IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or
IMAGE_FILE_LOCAL_SYMS_STRIPPED OR IMAGE_FILE_RELOCS_STRIPPED}
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
(*) Notez que À partir de XE5 et plus récents, cela doit être dans chaque unité individuelle pour laquelle vous souhaitez désactiver RTTI. Avant cela (XE4 et ci-dessous), il pourrait être dans le fichier DPR et s'appliquerait à toutes les unités du projet.
Je ne pense pas que ce soit RTTI ce qui ajoute autant de frais généraux à votre application. Comment savez-vous que c'est?