Quel gain de performance (le cas échéant) un service Windows peut-il gagner entre une version de débogage et une version de build et pourquoi?C# Debug vs Release
Répondre
Pour le code managé, sauf si vous avez beaucoup de choses dans certaines conditions compilé pour debug il devrait y avoir peu de différence - l'IL devrait être à peu près la même chose. Le Jitter génère différemment lorsqu'il est exécuté sous le débogueur ou non - la compilation vers IL n'est pas beaucoup affectée.
Il y a certaines choses que l'/optimize
lors de la compilation à ne IL, mais ils ne sont pas particulièrement agressifs. Et certaines de ces optimisations IL seront probablement gérées par les optimisations de gigue, même si elles ne sont pas optimisées dans l'IL (comme la suppression de Nops).
Voir Eric article Lippert http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx pour plus de détails:
Le/optimize drapeau ne change pas une quantité énorme de notre émission et la logique de génération. Nous essayons toujours de générer un code simple et vérifiable, puis de compter sur la gigue pour effectuer la lourde levée des optimisations lors de la génération du code machine réel. Mais nous allons faire quelques optimisations simples avec cet ensemble de drapeaux.
Lire l'article d'Eric pour plus d'informations sur /optimize
fait différemment dans la génération IL.
Bonnes choses ... qu'en est-il de la sécurité? Si vous expédiez/exposez avec des informations de débogage, une inspection en révélera-t-elle davantage sur votre code? Même s'il y a une différence négligeable dans les performances, je ne livrerais pas de code de débogage à moins que je ne devais le faire. –
@Edward: Je ne préconise pas vraiment la distribution de builds DEBUG, juste en disant que vous ne devriez probablement pas vous attendre à une différence majeure de performance entre les builds DEBUG et RELEASE.En outre, je ne pense pas qu'une build DEBUG ait plus de détails dans l'assembly lui-même - les informations de débogage vont dans le fichier .pdb, que vous n'avez pas besoin de distribuer. Les assemblys .NET sont généralement assez facilement désassemblés/décompilés (voir l'outil Réflecteur). Si vous êtes préoccupé par la rétro-ingénierie, il existe des outils d'obfuscation pour vous aider, mais je ne sais pas vraiment quoi que ce soit à leur sujet. –
Merci ... J'ai oublié le .pdb ayant les informations de débogage. Beaucoup d'outils d'obfuscation ne sont pas complets et potentiellement coûteux. Je suppose toujours que si quelqu'un veut vraiment entrer, il va entrer. Je devrais passer plus de temps à innover et moins de temps à me protéger. –
Eh bien, si la question est un double, je pense que certaines des meilleures réponses à la question initiale sont au bas. Personnellement, j'ai vu des situations où il y a une différence appréciable entre les modes de débogage et de relâchement. (Exemple: Property performance, où il y avait une différence de 2x entre l'accès aux propriétés en mode debug et release). Si cette différence serait présente dans un logiciel réel (au lieu de programme de référence) est discutable, mais je l'ai vu se produire dans un produit sur lequel j'ai travaillé.
De la réponse de Neil sur la question d'origine, de msdn social:
Il est pas bien documenté, voici ce que je sais. Le compilateur émet une instance de System.Diagnostics.DebuggableAttribute. Dans la version de débogage, la propriété IsJitOptimizerEnabled a la valeur True, dans la version de version, elle est False. Vous pouvez voir cet attribut dans le manifeste d'assembly avec ildasm.exe.
Le compilateur JIT utilise cet attribut pour désactiver les optimisations qui rendraient le débogage difficile. Ceux qui se déplacent autour du code comme le levage en boucle invariante. Dans certains cas, cela peut faire une grande différence dans les performances. Pas habituellement cependant.
Le mappage des points d'arrêt aux adresses d'exécution est le travail du débogueur. Il utilise le fichier .pdb et les informations générées par le compilateur JIT qui fournit l'instruction IL au mappage d'adresse de code. Si vous écrivez votre propre débogueur, vous utiliserez ICorDebugCode :: GetILToNativeMapping().
- 1. toggle flash player release/debug
- 2. Portage d'un projet Qt, configurations Debug/Release?
- 3. release Vs nil - Meilleure pratique
- 4. debug studio visuel vs mode de sortie
- 5. Espacement des lignes flex bin-debug différent de bin-release
- 6. Conditional DEBUG - Compile-t-il encore en code RELEASE?
- 7. .NET Liste de références différentes pour Debug/Release
- 8. Hudson et les configurations (debug, release, parallel, etc)
- 9. Comment vérifier si une application est en debug ou release
- 10. ÉNORME différence de framerate entre les versions release/debug
- 11. TFS: Construire des solutions avec des saveurs différentes (Debug/Release)
- 12. Utilisation simultanée de Boost en mode release et debug
- 13. WordPress 2.9.2 VS WordPress 3.0 Release Candidate
- 14. Quelle est la différence entre libs sous le répertoire Debug/et Release/en C?
- 15. Sortie d'Asp.net build vs debug build
- 16. Debug vs modes de libération sur l'iPhone
- 17. VS programme C++ fonctionne uniquement lorsque .exe est exécuté à partir du dossier? [VS pas debug]
- 18. debug C# application
- 19. Taille de pile des threads secondaires, différences significatives entre les versions DEBUG et RELEASE
- 20. RegQueryValueEx ne fonctionne pas avec une version Release mais fonctionne correctement avec Debug
- 21. release int dans l'objectif-c
- 22. Objective C Retain/Release Déboguer
- 23. Maven release: effectuer problème
- 24. Application.Run() fonctionne différemment dans une version Release sans débogueur que dans une version Debug
- 25. Pourquoi Silverlight se bloque-t-il en version Release mais pas en mode Debug?
- 26. Comment savoir si une application .NET a été compilée en mode DEBUG ou RELEASE?
- 27. iPhone Xcode RELEASE erreur de construction de la configuration - encore DEBUG fonctionne bien
- 28. C#: compiler avec/debug +/debug: pdbonly/optimize- optimise le code d'exécution
- 29. Visual Studio: raccourci clavier pour basculer entre les modes Debug et Release
- 30. SWC Flex: existe-t-il des versions "debug" et "release" pour SWC?
Ceci est une grande question qui pourrait être bien servi par des mesures de référence, si quelqu'un peut leur fournir. – kbrimington
duplication possible de [débogage C# vs performances de libération] (http://stackoverflow.com/questions/2446027/c-debug-vs-release-performance) –