Программа работает медленнее при запуске вне Visual Studio

Я заметил странное поведение в отношении моей программы. Я пишу это на C ++ с использованием Visual Studio Professional 2013 Update 1, и оно состоит из приложения exe, которое связывается с несколькими библиотеками DLL и вызывает функции, определенные в этих библиотеках.

В моей основной программе (которая состоит из нескольких тысяч строк кода) я вызываю функцию DLL (давайте назовем ееDLLFunction() ) и я рассчитываю время, затраченное на этот вызов, например:

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();

Что я заметил, так это то, что при его запуске вне Visual Studio требуется гораздо больше времени. Например:

Запуск его вотлаживать в Visual Studio с подключенным отладчиком ->~50 ms

Запуск его врелиз в Visual Studioс отладчиком --->~25 ms

Запуск его врелиз в Visual Studioбез отладчика --->~20 ms

Запуск этовне Visual Studio (релиз построить) --->~80 ms

Как вы можете видеть, его запуск в выпуске вне Visual Studio на самом деле занимает больше времени, чем запуск отладочной сборки с отладчиком!

Неисправная DLL-библиотека создается в одном и том же решении одним и тем же компилятором, и я дважды проверил, что все библиотеки DLL в каталоге, откуда я запускаю приложение, являются правильными.

Что может быть причиной такого поведения?

РЕДАКТИРОВАТЬ 5: Основное приложение порождает другое консольное приложение и связывается с ним по именованным каналам. Выяснилось, что не порождая, что другое приложение делает вызов DLL быстрым вне Visual Studio.

Однако одно и то же приложение порождается как внутри, так и вне Visual Studio, поэтому я не понимаю, почему оно замедляет другие вызовы только вне Visual Studio.

РЕДАКТИРОВАТЬ 4Оказалось, что это медленное поведение появляется, только если я помещаю вызов функции в какую-то часть кода моей основной программы, поэтому это должно быть связано с этой проблемой. Это много строк, но я продолжу исследования.

В любом случае, спасибо за предложения, они были полезны для выявления проблемы.

РЕДАКТИРОВАТЬ 3: Измерения с помощью QueryPerfomanceCounter:

Циклы ЦП, измеренные в Visual Studio (~ 50 КБ), составляют половину циклов ЦП (~ 110 КБ) (кстати, возвращаются ли QueryPerfomanceCounter () фактическими циклами ЦП?).

Разделив его на частоту, вы получите результаты, аналогичные std :: chrono.

РЕДАКТИРОВАТЬ 2: Я проверил с помощью Process Explorer, как предложено, библиотеки DLL, загруженные в VS и вне VS идентичны.

РЕДАКТИРОВАТЬ 1: по запросу я попробовал это:

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();

И результаты: запуск его врелиз в Visual Studioс отладчиком --->~19 seconds

Запуск этовне Visual Studio (релиз построить) --->~40 seconds

Ответы на вопрос(3)

Ваш ответ на вопрос