10
votes

Delphi Xe Désactiver RTTI

J'ai utilisé Delphi Xe récemment mais la taille exe est très grande à cause de RTTI (je pense)

HOWTO Supprimer RTTI et puis-je rendre ma taille de demande aussi petite que Delphi 2009 Application (490 Ko) sans contestation; et quelle est l'utilisation de RTTI


1 commentaires

Quelle est la taille de votre exe? Qu'attendez-vous?


5 Réponses :


8
votes

1 commentaires

+1 Pour les liens vers les informations de fond, bien que cela aurait été bien, vous aviez fourni la déclaration GABR désormais directement dans votre réponse.



17
votes

En bref (histoire complète fournie par des liens dans la réponse de Splash):

{$ méthodes explicites RTTI ([[] ([]) champs ([]) ([])}

Notez que AS de XE6 et plus récent, cela doit être dans chaque individu Unité pour laquelle vous voulez 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.


4 commentaires

+1 Pour la déclaration exacte, que vous auriez autrement besoin de trouver en creusant dans les documents, car ils sont principalement adaptés à la manière de l'utiliser au lieu de la mise hors tension.


Votre relevé RTTI, lorsqu'il est utilisé sur mes résultats D2010 dans l'erreur du compilateur: DCC Fatal Error: E2158 Unité système hors de date ou corrompue: TVISbilications manquantesClasses. Aucune suggestion?


Seulement ceci: docwiki.embarcadero.com/radstudio/en/... < I> manquant '% 25s' _% 28Delph i% 29 essayez-vous de recompiler une unité système? Peut-être devriez-vous poser une nouvelle question ici - plus de gens le voient de cette façon.


Pourquoi cela n'est pas par défaut dans des projets DLL? S'il n'y a pas de différence de performance



3
votes

Je ne pense pas que ce soit RTTI, ce qui ajoute autant de tailles sur le dessus de votre application. Comment savez-vous que c'est?


0 commentaires

7
votes

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 la prise en charge d'unicode, etc.). Si vous obtenez une augmentation de 500 à 700k, vérifiez si vous liez les unités UI VCL (formulaires, contrôles, etc.). Si vous obtenez une augmentation de 3 Mo, vous avez allumé des symboles de débogage supplémentaires.


5 commentaires

Mais je pense que Unicode est déjà à Delphi 2009 (application de base seulement 499 KB), mais il n'y a pas d'amélioration importante dans Delphi Xe VCL (Taille de l'application Delphi Xe 800 Ko), donc iithink 300 Ko est la plupart des formes de formulaire RTTI. et les applications D2007 (sans Unicode, ~ 350 KB)


Et pourquoi pensez-vous que RTTI n'était pas présent à Delphi 2009?


@Eugene: Pourquoi pensez-vous que c'est des fonctions Unicode si les fonctions Unicode remplacées les ANSI, plutôt que d'être ajoutées? Et où est le "liant intelligent" tout le monde parle de W.R.T. Delphes? ... Si cela ne pouvait pas comprendre que de grandes parties du code ne sont pas nécessaires, ce n'est peut-être pas si intelligent après tout.


@Status_Access_denied Unicode Fonctions n'a pas remplacé les fonctions ANSI, mais les étendues. C'est à dire. Pour certaines fonctions, il existe maintenant des variantes ANSI et Unicode.


@Eugene: Et ne sont pas ceux que nous parlons de fonctions d'exécution toujours? Et si les cordes qui se retrouvent comme des constantes ou des données statiques de mon binaire sont de toute façon unicode, pourquoi le soi-disant "liant intelligent" ne jette pas les fonctions qui prennent inutilement de la place dans mon binaire? Je reçois ton point, cependant. Je suppose que la façon dont Unicode a été mise en œuvre (et reportée comme un héritage) ne rend pas mieux les choses.



4
votes

C'est parce que certaines fonctionnalités des génériques ont été ajoutées aux unités SYS. Des génériques ont été ajoutés en 2009 mais dans des unités de systèmes Certaines classes ont été réécrites de génériques dans XE et XE2. IMHO

Ajoutez ces drapeaux pour réduire la taille dans le fichier DPR (projet> Source de vue) s> à chaque unité individuelle (à partir de XE5) *. P>

{$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([])}


0 commentaires