我有一个关于C++/CLI与本机C++速度的问题。我写了一个小测试应用程序,我看到非常令人惊讶的结果。本机C++与C++/CLI速度
看来,非托管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
输出托管代码与编译管理(推,关闭):
Called
Time Elapsed: 24516
Number of random: 20000000
输出本地代码:
Called
Time Elapsed: 2156
Number of random: 20000000
在主管只需拨打90即可拨打GrowBalance年限。很基本的测试。有什么我做错了,或者我真的在看使用C++/CLI慢4.5倍的代码。而且我也不理解关闭托管代码的情况。我读过的所有东西都表示这会将代码编译为本地C++,但速度非常慢。任何帮助,将非常感激。
更新: 我刚刚在Visual Studio 2005中运行此测试,而不是在2008年。本机C++性能相匹配。
更新#2: 我只是把我的测试代码放到一个类,而不是一个单一的功能,我得到更好的结果。现在混合代码在〜5000ms的平均运行时间进行预成型
但是在2005年,我看到了更快的结果。平均运行时间约1875毫秒。也许我会坚持到2005年为我的CLI开发。除非有人有理由说这可能会发生。
你是说在VS2005 C++/CLI快于它在VS2008? – Gabe 2010-10-29 01:53:28