У меня есть вопрос относительно скорости C ++ / CLI и родной скорости C ++. Я написал небольшое тестовое приложение и вижу очень удивительные результаты.
Кажется, что неуправляемый код C ++ / CLI значительно медленнее. В основном я создал два консольных приложения. Одно стандартное консольное приложение win32 и консольное приложение CLR
Вот код, который я сделал для теста. Я сохранил код абсолютно одинаковым во всех версиях теста.
const int NumberOfTests = 10000000;
void GrowBalance(int numberOfYears)
{
std::cout<<"Called"<<std::endl;
DWORD startTime = GetTickCount();
int numberOfRandom = 0;
for(int i = 0; i < NumberOfTests; i++)
{
double dBalance = 10000.0;
for(int year = 0; year < numberOfYears; year++)
{
dBalance *= 1.05;
if(dBalance > 20000.00 && dBalance < 22000.00)
{
numberOfRandom++;
}//if
}//for
}//for
DWORD endTime = GetTickCount();
std::cout<<"Time Elapsed: "<<endTime - startTime<<std::endl;
std::cout<<"Number of random: "<<numberOfRandom<<std::endl;
}
Выходной управляемый код:
Called
Time Elapsed: 9937
Number of random: 20000000
Вывод управляемого кода с управляемой прагмой (push, off):
Called
Time Elapsed: 24516
Number of random: 20000000
Вывод собственного кода:
Called
Time Elapsed: 2156
Number of random: 20000000
В сети только что позвонил GrowBalance с указанием 90 лет. Довольно простой тест. Есть ли что-то, что я делаю неправильно или я действительно смотрю код, который будет в 4,5 раза медленнее с использованием C ++ / CLI. И я также не понимаю, как отключить управляемый код. Все, что я прочитал, говорит, что это скомпилирует код на родной C ++, но это безумно медленнее. Любая помощь с этим будет очень цениться.
Обновление:
Я только что выполнил этот тест в Visual Studio 2005 вместо 2008 года. Соответствие производительности на собственном C ++.
Обновление № 2:
Я просто помещаю свой тестовый код в класс вместо одной функции и получаю намного лучшие результаты. Теперь смешанный код преформируется при среднем времени выполнения ~ 5000 мс
Но в 2005 году я вижу гораздо более быстрые результаты. Среднее время работы около ~ 1875 мс. Может быть, я просто буду придерживаться 2005 года для моей разработки CLI. Если у кого-то нет причины, по которой это может происходить.