从VC10切换到VC11时,我观察到在读取包含double编号的文件时,性能下降了10倍:
#include <iostream>
int main() {
  double sum = 0, x;
  for(int i=0; i<1000000; i++){
    std::cin >> x;
    sum += x;
  }
  std::cerr << sum << std::endl;
  return 0;
}我在Developer Studio中构建了可执行文件,因此环境最多只能在发布模式下选择选项。
有人能证实这一点吗?可能的问题是什么?是否与locale有关?
提前谢谢你,
安德烈亚斯
发布于 2013-06-11 21:36:13
*由于某种原因,我之前的答案被删除了(我承认第一句话有点混乱,因为当它得到更好的结果时编辑得很笨拙)
实际上,对我来说,性能是差不多的。
VC11写入/读取1M会使->加倍6.600/3.562秒
VC10写入/读取1M会使->加倍6.266/3.606秒
因此,在我的实验中,从vc11中的文件中读取双精度值是非常困难的。与vc10具有相同的性能。代码示例:
int _tmain(int argc, _TCHAR* argv[])
{
  auto x = 0.0;
  auto numberofdoubles = 1000000;
  auto filename = "C:\\double.txt";
  {
  std::ofstream filestr(filename);
  auto starttime = clock();
  for(int i=0; i<numberofdoubles; i++)
    filestr << (double)i << " ";
  auto endtime = clock();
  auto elapsed = (double)(endtime - starttime)/CLOCKS_PER_SEC;
  std::cout << "writing: " << elapsed << std::endl;
  }
  {
  std::ifstream filestr (filename);
  auto starttime = clock();
  for(int i=0; i<numberofdoubles; i++)
    filestr >> x;
  auto endtime = clock();
  auto elapsed = (double)(endtime - starttime)/CLOCKS_PER_SEC;
  std::cout << "reading: " << elapsed << std::endl;
  }
  return 0;
}https://stackoverflow.com/questions/15200728
复制相似问题