J'utilise cnpack utilise un nettoyant , mais en général qui sont les les inconvénients d'avoir des unités inutiles? P>
Je connais certains d'entre eux: P>
1) Bien sûr, si l'unité n'est jamais utilisée dans le projet complet, il y aura une consommation de ressources inutile p>
2) La perspicacité du code donnera des résultats inutilement p>
3) Le code de code sera plus lent p>
mais imaginez un cas simple: p>
3 Réponses :
Delphi Smart Linker ignorera le code inutilisé afin que la présence de ces unités "supplémentaires" n'augmente pas la taille du programme compilé. P>
Voici quelques points que je reçois de
+1 pour la maintenabilité. Particulièrement utile lors de la dépannage des bogues qui se produisent lors de l'initialisation. Le temps passé à regarder des unités inutilisées est gaspillé de temps.
non. En général SmartLinking fonctionne comme ceci: p>
Conclusion: la dernière taille .exe est déterminée p>
Free Pascal fonctionne grossièrement de la même manière, les valeurs par défaut sont simplement différentes; Débogage est actuellement presque toujours "en binaire" (comme TD32) et dans les instantanés, SmartLinking est désactivé par défaut. (Dans les versions officielles, c'est sur). P>
En outre, il ne faut pas perdre de vue la magnitude. Strutils dans son intégralité est comme 15kb max. P>
Vous avez obtenu une remarque de SB sur cette réponse, j'ai aimé partager: p>
En gros, il a mis en doute sur la remarque que les énums sont toujours liées. Peut-être que l'enregistrement d'une classe qui a une propriété publiée du type ENum les dragose. Le raisonnement a du sens, mais je ne l'ai pas encore testé. Donc, RTTI de Enum peut être uniquement lié si TypeInfo (tenualtype) est interrogé quelque part ou s'il est utilisé dans une section publiée de la classe utilisée. (directement ou TypeInfo (Theclass) est interrogé) P>
Des problèmes de mémoire de côté, le compilateur doit résoudre ces dépendances avant qu'il ne puisse les abattre. Mais le vrai problème est l'encombrement de vous distraire de voir ce qu'une unité utilise vraiment.
Je n'ai pas parlé de la destinaçabilité de la source et de compiler la vitesse de ne pas confondre la discussion. Dans le cas de Strutils une initialisation oubliée n'est pas mauvaise, mais certaines unités pourraient tirer dans des DLL dans l'initialisation, que vous devez ensuite déployer et gérer (dans l'installateur).
En outre, dans l'exemple donné dans la question, je pense qu'il n'y aurait essentiellement aucune différence de taille de la mémoire (moins de 50 octets, je suppose?) Depuis que l'unité est déjà utilisée par une autre unité du projet.
Dans ce cas, zéro. (Sauf si 2010+ RTTI change cela)
Les fichiers de ressources b> sont également inclus simplement à l'aide d'une unité, même si vous n'utilisez aucun code de l'unité. (C'est le but entier de la composante TXPManifest, d'apporter dans l'unité XPMAN, qui relie la ressource manifeste par défaut. Le composant lui-même ne fait rien, mais la mise sur une forme permet à l'IDE ajouter l'unité à votre projet.)
Le plus gros problème, à mon esprit, est que vous pouvez parfois être pris de sorte par les règles de décomposition Delphes. Si vous avez deux identifiants avec le même nom dans différentes unités, vous utilisez ce nom, il fait référence à celui déclaré dans l'unité déclarée la plus tard dans la clause Utilisations. P>
Si vous souffrez d'un problème, vous pouvez toujours préciser complètement l'identifiant. Ce que j'aimerais vraiment voir, ce serait des avertissements du compilateur pour vous dire si vous nommez un identifiant dont l'identité n'est déterminée que par cette Dernière déclaration de la clause Utilisations Clause EM> Scoping Rule. P>
CodeInSight est une fonctionnalité vraiment drôle, alors oui, il est préférable de ne pas le déranger à moins que nécessaire. Sinon, les effets sont négligeables.