Esto, por supuesto, no es causado por tener el símbolo _DEBUG definido o compilar el código en la configuración de depuración. El código de depuración agregado se ejecuta ya sea que el depurador esté o no asociado al programa.
El depurador normalmente no afecta a la ejecución del código, se mantiene fuera del camino llamando a WaitForDebugEvent. Lo bloquea, hasta que el sistema operativo le dice que sucedió algo digno de mención. Eso puede desencadenar un montón de código en el depurador que puede ralentizar su programa. Puede ver los eventos enumerados en la documentación de la estructura DEBUG_EVENT.
ellos Anotando un poco más allá de la documentación: los pasos del depurador en y puede ralentizar el programa cuando:
El programa se carga o descarga un archivo DLL. Se producen muchas cosas durante la carga, el depurador busca un archivo de símbolos de depuración (.pdb). Puede ponerse en contacto con un servidor de símbolos para descargarlo. Cualquier punto de interrupción que se estableció en el código fuente DLL se activará. Esto puede ser bastante lento, pero el efecto es temporal y generalmente solo ralentiza el inicio. Puede ver la notificación de carga/descarga en la ventana Salida.
El programa hace una excepción. Esto activa el depurador en el momento en que se genera la excepción, una "notificación de primera oportunidad". Lo cual puede ser muy útil, puede utilizar la casilla Depurar + Excepción, lanzada para hacer que el depurador se detenga cuando se produce la excepción. Puede ver el mensaje de notificación en la ventana de Salida. Este hace ralentiza el código que aumenta y capta las excepciones tremendamente y es muy probable que sea la fuente de su ralentización. Nunca use excepciones para el control de flujo.
Un hilo comienza a ejecutarse o termina. Nuevamente, se imprime un mensaje de notificación en la ventana de Salida. Tendría que crear un lote de subprocesos para hacer esto ralentizar su programa.
Cuando su programa usa OutputDebugString() para fines de rastreo. Visible en la ventana de Salida. Otro buen candidato para una desaceleración, la producción cae en el cubo de bits si no hay un depurador conectado.No debe tener problemas para diagnosticar esto como la causa, el efecto secundario obvio es ver un lote de mensajes en la ventana de resultados.
Cuando el programa llega a un punto de interrupción. No hay muchas razones para quedar perplejo con eso. Pero puede establecer puntos de interrupción que ralenticen mucho el programa pero que no provoquen un corte en el depurador. En particular, el punto de interrupción condicional, el contador de visitas, el filtro y la operación de cuando se acierta serán lentos. Use Debug + Windows + Breakpoints para revisar los puntos de interrupción definidos.
Depurar agrega muchos sobrecargas a un programa. ¿Por qué estás asumiendo que las cosas están mal? – Oded
Debug no debería agregar muchos sobrecargas. La diferencia entre un depurador conectado y no conectado no debería ser una diferencia en absoluto. – plaisthos