Parece que sería ideal (en términos de legibilidad) usar, por ejemplo, Debug.WriteLine
para escribir en la salida en lugar de una tonelada de instrucciones #if DEBUG
.C# ¿Las sentencias Debug se compilan cuando se ejecuta en modo Release?
Cuando el programa se compila en modo de lanzamiento, ¿todos los gastos generales con el Debug.WriteLine
desaparecen como si no existieran, o aún se invoca la función, pero no se hace nada internamente?
Si es así, ¿hay alguna forma de obtener esta funcionalidad en una clase personalizada, es decir, una llamada estática solo se compilaría si estamos en modo Depuración?
No fue una respuesta, pero incluso si no conocía el atributo condicional y puso el método completo en #if debug, se optimizaría. http://stackoverflow.com/questions/11783/in-net-will-empty-method-calls-be-optimized-out –
@mootinator: Bueno, no es lo mismo. Con 'Coditional', todo se descarta en el momento de la compilación. Con el método vacío, JITter todavía tiene que analizar cosas en tiempo de ejecución, lo que reduce el rendimiento. No mucho, pero de todos modos. De esta forma, por el contrario, JITter nunca vería esta llamada de método en absoluto. –
Tenga en cuenta que si realiza una concatenación de cadenas loca antes de pasarla a Debug.Write/WriteLine, la concatenación de cadenas se incluirá en la versión de lanzamiento. Si coloca su lógica de concatenación dentro de la función, se eliminará. Por lo tanto, puede hacer su cadena concat de la siguiente manera: Debug.WriteLine (DoHugeStringCalculation()); .. de otra manera puede usar #if DEBUG alrededor de todo. –