Définir TRACE Constante dans .NET / Visual Studio
Dans Visual Studio 2010, si vous allez à des propriétés d'un projet et aller à l'Onglet création, il y a une case à cocher pour "Définir TRACE Constante." Qui est l'équivalent de faire un #define TRACE.
Toutes les méthodes de Système.Diagnostics.Trace ont un [Conditional("TRACE")]
autour d'eux.
Ma question est pourquoi serait-il possible de désactiver cette fonction? Je veux dire, si vous n'avez pas la moindre trace d'auditeurs défini, alors ce n'est pas comme si vous allez remplir un journal ou quelque chose. Il se sent juste bizarre pour moi. Si vous allez à travers l'effort de mettre en appelle à la Trace, pourquoi voudriez-vous pas le contrôler par le biais de l'App/Web.config, mais au lieu de le contrôler via un commutateur de compilateur, ce qui exclut la possibilité de se tourner sur le dos sans recompiler.
Suis-je raté quelque chose? Sûrement, il ne peut être QUE mauvais pour la performance, non?
- L'appel de la fonction Trace() n'est pas libre, même si il n'y a pas d'auditeurs. Ce qui rend très cher n'est pas difficile.
- Je ne pense pas que c'est granuleux assez bien. Vous pourriez vouloir pour ne suivre que certains types d'événements dans le déploiement (avertissement, erreur) en vue de la session, considérant que dans le debug vous pouvez tout (informations, commentaires, etc.). Il devrait vraiment être TRACE_ERROR, TRACE_VERBOSE, etc.
- Voir stackoverflow.com/questions/6911863/... pour plus d'informations sur la TRACE et l'optimisation de votre build.
Vous devez vous connecter pour publier un commentaire.
Sans doute cette case à cocher est l'équivalent de la
/define:TRACE
option du compilateur. Vous pouvez activer cette option pour une version release, soit parce que vous ne voulez pas que les utilisateurs finaux à voir la trace de sortie pour une raison quelconque (p. ex. sécurité), ou pour améliorer les performances. Bien sûr, l'augmentation de la performance dépendra de la façon dont beaucoup de travail est fait quand il est sur, mais le Attribut conditionnel entraîne le compilateur pour supprimer complètement l'appel de la fonction (y compris toute mise en forme de chaîne, etc.) à partir de l'généré IL, de sorte qu'il pourrait faire une différence significative.