【发布时间】:2012-06-21 19:02:35
【问题描述】:
我们正在使用 Visual Studio 2005。我们正在考虑在 Visual Studio 2012 发布后升级到它。我在 Visual Studio 2012 RC 中尝试了这个小程序,并惊讶地发现它的运行速度比在 Visual Studio 2005 中慢 2 倍以上。在 VS2012 中,我使用了默认的发布构建设置。对我来说,VS2005 大约需要 20ms,VS2012 大约需要 50ms。为什么这么慢?
#include <windows.h>
#include <deque>
using namespace std;
deque<int> d;
int main(int argc, char* argv[])
{
const int COUNT = 5000000;
timeBeginPeriod(1);
for (int i = 0; i < COUNT; ++i)
{
d.push_back(i);
}
double sum = 0;
DWORD start = timeGetTime();
for (int i = 0; i < COUNT; ++i)
{
sum += d[i];
}
printf("time=%dms\n", timeGetTime() - start);
printf("sum=%f\n", sum);
return 0;
}
【问题讨论】:
-
你可能没有以同样的方式编译它们。
-
建议:如果您使用或可能使用 Visual C++ 标准库,请不要使用
std::deque。它有abysmal performance characteristics. -
尝试检查超出范围的错误,看看 VS 2012 是否显示断言。他们启用了一些检查,您可能在 2005 年禁用它并在 2012 年启用它msdn.microsoft.com/en-us/library/aa985982%28v=vs.80%29.aspx
-
两者都是 x86,两种优化设置似乎都一样(2012 年的项目是从 2005 年的项目转换而来的)。很快会尝试其他建议。
-
2005 年还好:无论我对“启用 C++ 异常”使用什么设置,它的运行时间都是一样的,大约 20 毫秒。对于 2012 年,如果我禁用异常,它会从大约 50 毫秒到 23 毫秒左右。那么在这种情况下,2005 处理有更好的异常?那仍然会令人失望,我们通常会在异常情况下运行。
标签: c++ performance visual-c++ visual-studio-2005 visual-studio-2012