2012-07-02 17 views
7

Si tengo una aplicación WPF y para fines de depuración, hay mensajes que se muestran en la consola. ¿Afectará esto el rendimiento de la aplicación cuando está configurada como una Aplicación de Windows y no se muestra ninguna consola?es Console.WriteLine un cuello de botella en las aplicaciones de Windows?

+6

Bueno, para la depuración, ¿por qué no utilizar Debug.WriteLine? Saldrá a la ventana "Salida", pero puede redireccionarse a la ventana inmediata a través de las opciones de Visual Studio si no me equivoco. – erodewald

+0

Mídelo y lo sabrás con certeza :-) –

+0

Pregunta similar para asp.net, no garantiza que la respuesta sea la misma: http://stackoverflow.com/questions/137660/where-does-console-writeline-go-in-asp-net –

Respuesta

5

El verdadero cuello de botella en Console.WriteLine() es en realidad escribir en la consola. Cuál es realmente costoso, particularmente cuando la consola necesita ser desplazada. También hay una sobrecarga considerable en el proceso de alojamiento de Visual Studio capturando la salida cuando no hay consola y mostrándola en la ventana Salida.

Ninguno de los cuales juega un rol después de implementar su aplicación. Pero sí, todas las llamadas a los métodos se están realizando y las cadenas se están formateando, solo cae en el cubo de bits en el último momento posible cuando la función api de Windows descubre que no hay consola.

Si su aplicación tiene una ejecución aceptable ahora, cuando se ejecuta en la compilación de depuración, no se preocupe. Si ve una ejecución menos que estelar en la compilación Release sin un depurador y cree que puede deberse a Console.WriteLine(), no dude en Buscar + Reemplazar en Debug.Print().

2

Un cuello de botella implica que es el punto más lento de su código. No podemos saber eso a menos que sepamos todo lo demás que estás haciendo.

¿Hay algún impacto en el rendimiento? Sí, probablemente. No está haciendo nada, está haciendo algo. ¿Va a ser suficiente para ser el cuello de botella de su programa, lo dudo mucho? ¿Va a ser suficiente incluso para tener un impacto notable, es posible, pero poco probable? Todo depende de qué más esté haciendo su programa y de cuánto está escribiendo en la consola (Tendría que ser bastante para que empiece a notar el tiempo que lleva).

Como se mencionó en el comentarios, puede usar Debug.WriteLine en lugar de Console.WriteLine para que pueda ver el resultado cuando se depura, pero cuando compila la versión Release no imprimirá esas instrucciones.

0

Hacer algo siempre lleva más tiempo que no hacer nada.

El acto de escribir texto en una consola nula no debería ser un gran golpe de rendimiento, pero lo que está pasando como parámetros y en qué volumen podría ser.

Mida el rendimiento real con y sin la salida de la consola para ver por sí mismo si su patrón de uso está dentro de sus tolerancias aceptables.

Debug.WriteLine() podría ser una mejor opción dependiendo de sus requisitos, ya que estos se excluirán automáticamente cuando compile para Release.

0

Tratar de construir y optimizar su propio marco de trabajo de registro raramente es el mejor enfoque.

¿Has visto algo así como log4net? Puede configurar varios appenders, incluido el inicio de sesión en la consola. También puede compilar apéndices asíncronos para disminuir realmente la sobrecarga de registro.

Erick

Cuestiones relacionadas