0

从 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

提前致谢,

安德烈亚斯

4

1 回答 1

0

*由于某种原因,我之前的答案被删除了(我承认第一句话有点令人困惑,因为当它得到更好的结果时进行了笨拙的编辑)

实际上,对我来说,性能大致相同。

VC11 写/读 1M 双倍 -> 6.600/3.562 秒
VC10 写/读 1M 双倍 -> 6.266/3.606 秒

所以在我的实验中,从 vc11 中的文件中读取双精度值是 aprox。与 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;
}
于 2013-06-11T13:36:13.100 回答