¿Cuánta ganancia de rendimiento (si hay alguna) puede obtener un servicio de Windows entre una versión de depuración y una versión de lanzamiento y por qué?C# Debug vs Release
Respuesta
Para el código administrado, a menos que tenga muchas cosas compiladas condicionalmente para las compilaciones DEBUG, debería haber poca diferencia: la IL debería ser prácticamente la misma. El Jitter se genera de manera diferente cuando se ejecuta bajo el depurador o no; la compilación a IL no se ve afectada demasiado.
Hay algunas cosas que hace /optimize
al compilar en IL, pero no son particularmente agresivas. Y algunas de esas optimizaciones IL probablemente serán manejadas por las optimizaciones de jitter, incluso si no están optimizadas en la IL (como la eliminación de nops).
Ver el artículo de Eric Lippert http://blogs.msdn.com/ericlippert/archive/2009/06/11/what-does-the-optimize-switch-do.aspx para más detalles:
La bandera/Optimizar no cambia una cantidad enorme de nuestra emisora y lógica de generación. Siempre tratamos de generar código directo y verificable y luego confiar en la trepidación para realizar el levantamiento pesado de optimizaciones cuando genera el código de máquina real. Pero haremos algunas optimizaciones simples con ese conjunto de banderas.
Lea el artículo de Eric para obtener información acerca de /optimize
hace de manera diferente en la generación IL.
Cosas buenas ... ¿qué pasa con la seguridad? Si envía/expone con información de depuración, ¿una inspección revelará más sobre su código? Incluso si hay una diferencia insignificante en el rendimiento, no enviaría el código de depuración a menos que tuviera que hacerlo. –
@Edward: realmente no estoy abogando por la distribución de compilaciones DEBUG, simplemente diciendo que probablemente no se debe esperar una gran diferencia en el rendimiento entre las compilaciones DEBUG y RELEASE.Además, no creo que una compilación DEBUG tenga más detalles en el ensamblado en sí: la información de depuración va en el archivo .pdb, que no necesita distribuir. Los ensamblados .NET generalmente se desmontan/decompilan con facilidad (consulte la herramienta Reflector). Si le preocupa la ingeniería inversa, existen herramientas de ofuscación para ayudarlo, pero realmente no sé nada al respecto. –
Gracias ... Olvidé que el .pdb tenía la información de depuración. Muchas herramientas de ofuscación no son a prueba completa y potencialmente costosas. Siempre asumo que si alguien realmente quiere, entrarán. Debo dedicar más tiempo a innovar y menos a proteger mi tiempo. –
Bueno, aunque la pregunta es un duplicado, creo que algunas de las mejores respuestas en la pregunta original están en la parte inferior. Personalmente, he visto situaciones en las que existe una diferencia apreciable entre los modos de depuración y liberación. (Ejemplo: Property performance, donde había una diferencia de 2x entre el acceso a las propiedades en modo de depuración y versión). Si esta diferencia estaría presente en un software real (en lugar de un programa de referencia) es discutible, pero lo he visto en un producto en el que trabajé.
De la respuesta de Neil en la pregunta original, desde msdn social:
No está bien documentado, esto es lo que sé. El compilador emite una instancia de System.Diagnostics.DebuggableAttribute. En la versión de depuración, la propiedad IsJitOptimizerEnabled es True, en la versión de lanzamiento es False. Puede ver este atributo en el manifiesto de ensamblaje con ildasm.exe.
El compilador JIT utiliza este atributo para deshabilitar las optimizaciones que dificultarían la depuración. Los que mueven el código como un alzado invariante de bucle. En casos seleccionados, esto puede marcar una gran diferencia en el rendimiento. Aunque no suele ser así.
La correlación de los puntos de interrupción con las direcciones de ejecución es tarea del depurador. Utiliza el archivo .pdb y la información generada por el compilador JIT que proporciona la instrucción IL a la asignación de direcciones de código. Si escribiera su propio depurador, usaría ICorDebugCode :: GetILToNativeMapping().
- 1. Release Mode vs Debug = "false"
- 2. Compilador .NET - DEBUG vs. RELEASE
- 3. Release vs Debug Build Times
- 4. Diferencia de dependencia entre Release & Debug
- 5. ¿Cómo hacer una compilación diferente entre Debug y Release?
- 6. Autorelease vs. Release
- 7. ¿Cómo identificar si una biblioteca es creación DEBUG o RELEASE?
- 8. ¿Java tiene el modo de compilación 'Debug' y 'Release' como C#?
- 9. Release-Debug Builds para la aplicación de Android
- 10. Defines.Debug vs DEBUG #if
- 11. DEBUG vs _DEBUG
- 12. Semaphore.WaitOne/Release vs Monitor.Pulse/Wait
- 13. iPhone SDK: Dealloc vs. Release?
- 14. Confundido sobre las carpetas Release/Debug en Visual Studio 2010
- 15. Cómo compilar Debug y Release para un proyecto de TeamCity
- 16. Referencia a Library Binary - Debug o Release version?
- 17. .Net Release build trabajando más lento que Debug
- 18. #if DEBUG vs condicional ("Test")
- 19. C# ¿Las sentencias Debug se compilan cuando se ejecuta en modo Release?
- 20. ¿Cuál es la diferencia clave entre una compilación 'Debug' y 'Release' en .NET?
- 21. ¿Cuál es la diferencia entre los modos Release y Debug en Visual Studio?
- 22. Release COM Object en C#
- 23. El comando Simple OpenCV funciona en modo Debug pero no en modo Release
- 24. ¿Cómo saber si se compiló una aplicación .NET en modo DEBUG o RELEASE?
- 25. JNA C DLL Debug Howto?
- 26. ¿Mejores prácticas y herramientas para eliminar las diferencias entre compilaciones de Debug y Release?
- 27. Cómo especificar diferentes directorios de salida de Debug/Release en el archivo .pro de QMake
- 28. ¿Cuál es la diferencia entre compilation debug = "false" y Release mode?
- 29. ¿Msbuild reconoce alguna configuración de compilación que no sea DEBUG | RELEASE
- 30. Xcode/iOS: ¿Cómo determinar si el código se está ejecutando en la compilación DEBUG/RELEASE?
Esta es una gran pregunta que podrían ser bien atendidas por algunas métricas de referencia, si alguien puede proporcionarlas. – kbrimington
posible duplicado de [C# depuración frente a versión de rendimiento] (http://stackoverflow.com/questions/2446027/c-debug-vs-release-performance) –