Visual Studio奇怪:VS 2010中的C ++程序比2008年慢得多

时间:2012-05-22 17:59:40

标签: c++ visual-studio-2010 visual-studio-2008 visual-c++

我有以下程序(此代码是我正在练习的谷歌代码堵塞问题的缩小版本。)

在VS 2008上运行此程序时,它以 10.459 秒运行。 在VS 2010上,它以 47.073 秒运行。我尝试使用和不使用调试运行它,时间相似。

为何存在巨大差异?

以下是编译器命令行(我只是在Visual Studio中使用默认设置创建新的C ++控制台应用程序,但无论如何我都会将这些设置放在此处,以防有人需要查看它们。)

VS 2008

/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

VS 2010

/ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug\myproj2.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue 

以下是链接器命令行:

VS 2008

/OUT:"c:\temp\myproj\myproj\Debug\myproj.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\myproj.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"c:\temp\myproj\myproj\Debug\myproj.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

VS 2010

/OUT:"c:\temp\myproj2\Debug\myproj2.exe" /INCREMENTAL /NOLOGO "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\myproj2.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"c:\temp\myproj2\Debug\myproj2.pdb" /SUBSYSTEM:CONSOLE /PGD:"c:\temp\myproj2\Debug\myproj2.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE 

修改 评论问题的答案:
从命令行运行VS 2008版本(发布版本):~3秒
从命令行运行VS 2010版本(发布版本):~1.5秒

(这些时间似乎与直接从VS IDE运行的时间相似)
从命令行运行VS 2008版本(调试版本):~10.5秒
从命令行运行VS 2010版本(调试版本):~49秒

代码:

#include <algorithm>
#include <numeric>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <complex>
#include <string>
#include <cstring>
#include "time.h"
using namespace std;

int main() {

  clock_t t1,t2;
  t1=clock();

  int A=1069514;
  int B=1946556;

  set< pair< int, int > > vals;
  char buff[1000];
  for(int i = A; i <= B; ++i) {
    sprintf(buff,"%d",i);
    string cur = buff;
    for (int j = 1; j <= (int)cur.size() - 1; ++j) {
      string y=cur.substr(j) + cur.substr(0,j);
      if (y[0]=='0')
        continue;
      int k = atoi(y.c_str());
      if (k > i && k <= B) {
        vals.insert(make_pair(i,k));
      }
    }  
  }

  t2 = clock();
  float secs = ((float)t2 - (float)t1) / CLOCKS_PER_SEC;
  cout<<"took "<<secs<<endl;


  return 0;
}

0 个答案:

没有答案