首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >operator>>(istream&,double) VC10/VC11的性能

operator>>(istream&,double) VC10/VC11的性能
EN

Stack Overflow用户
提问于 2013-03-04 19:41:19
回答 1查看 141关注 0票数 0

从VC10切换到VC11时,我观察到在读取包含double编号的文件时,性能下降了10倍:

代码语言:javascript
运行
复制
#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有关?

提前谢谢你,

安德烈亚斯

EN

Stack Overflow用户

发布于 2013-06-11 21:36:13

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

实际上,对我来说,性能是差不多的。

VC11写入/读取1M会使->加倍6.600/3.562秒

VC10写入/读取1M会使->加倍6.266/3.606秒

因此,在我的实验中,从vc11中的文件中读取双精度值是非常困难的。与vc10具有相同的性能。代码示例:

代码语言:javascript
运行
复制
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;
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15200728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档