El programa se ejecuta más lentamente cuando se inicia fuera de Visual Studio

Estoy notando un comportamiento extraño con respecto a mi programa. Lo escribo en C ++ con Visual Studio Professional 2013 Update 1 y consta de una aplicación exe que se vincula con múltiples DLL y llama a funciones que están definidas en esas DLL.

En mi programa principal (que consta de varios miles de líneas de código) llamo una función DLL (llamémoslaDLLFunction() ) y calculo el tiempo que tarda esa llamada, así:

auto beginTime = std::chrono::high_resolution_clock::now();

DllFunction();

auto endTime = std::chrono::high_resolution_clock::now();

long long totalTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();

Lo que estoy notando es que toma mucho más tiempo cuando se inicia fuera de Visual Studio. Por ejemplo:

Ejecutando endepurar dentro de Visual Studio con depurador adjunto ->~50 ms

Ejecutando enlanzamiento dentro de Visual Studiocon depurador adjunto --->~25 ms

Ejecutando enlanzamiento dentro de Visual Studiosin depurador adjunto --->~20 ms

Corriendofuera de de Visual Studio (lanzamiento construir) --->~80 ms

Como puede ver, ejecutarlo en el lanzamiento fuera de Visual Studio en realidad lleva más tiempo que ejecutar una compilación de depuración con un depurador adjunto.

La DLL ofensiva está construida dentro de la misma solución por el mismo compilador, y he comprobado que todas las DLL en el directorio desde donde inicio mi aplicación son las correctas.

¿Cuál podría ser la razón de tal comportamiento?

EDITAR 5: La aplicación principal genera otra aplicación de consola y se comunica con ella mediante canalizaciones con nombre. Resultó que no se genera que otra aplicación haga que la llamada DLL sea rápida fuera de Visual Studio.

Sin embargo, la misma aplicación se genera dentro y fuera de Visual Studio, por lo que no veo por qué ralentiza otras llamadas fuera de Visual Studio.

EDITAR 4: Resultó que este comportamiento lento aparece solo si coloco la llamada de función en alguna parte del código de mi programa principal, por lo que debe ser un problema relacionado con eso. Son muchas líneas, pero continuaré investigando.

Gracias por las sugerencias de todos modos, fueron útiles para identificar el problema.

EDITAR 3: Mediciones con QueryPerfomanceCounter:

Los ciclos de CPU medidos dentro de Visual Studio (~ 50k) son la mitad de los que están fuera (~ 110k) (por cierto, ¿son los que devuelve QueryPerfomanceCounter () ciclos de CPU reales?).

Dividirlo por la frecuencia muestra resultados similares a los de std :: chrono.

EDITAR 2: Verifiqué con el explorador de procesos como se sugirió, los archivos DLL cargados dentro de VS y fuera de VS son idénticos.

EDITAR 1: según lo solicitado, probé esto:

auto beginTime = std::chrono::high_resolution_clock::now();

for (int i = 0; i < 1000; ++i)
{
    DllFunction();
}
auto endTime = std::chrono::high_resolution_clock::now();

long long totalTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count();

Y los resultados: ejecutarlo enlanzamiento dentro de Visual Studiocon depurador adjunto --->~19 seconds

Corriendofuera de de Visual Studio (lanzamiento construir) --->~40 seconds

Respuestas a la pregunta(3)

Su respuesta a la pregunta