首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在计算密集型程序中正确使用流

在计算密集型程序中正确使用流
EN

Stack Overflow用户
提问于 2013-02-13 13:34:38
回答 3查看 84关注 0票数 0

我有一个程序,可能需要3-4个小时才能完成。在进行过程中,我需要将各种信息输出到通用文件"info.txt“中。以下是我目前的做法

代码语言:javascript
运行
复制
char dateStr [9];
char timeStr [9];
_strdate(dateStr);
_strtime(timeStr);

ofstream infoFile("info.txt", ios::out);
infoFile << "foo @ " << timeStr << " , " << dateStr << endl;
infoFile.close();

在一次跑步中,我做了五次。我的问题是:从效率和标准的角度来看,这是最合适的吗?

  1. 在每个输出之后关闭infoFile (因此,在每次输出时使用五个infoFile1、infoFile2、.、infoFile5 )
  2. 或者只使用"infoFile“,从而在整个运行过程中打开它?

编辑:所谓“一次运行”,我指的是程序的一次运行。所以,“一次运行五次”的意思是,在运行一次程序时,我要向info.txt输出一些东西(这需要3-4个小时)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-13 14:57:50

你到底想做什么还不太清楚。如果你发布的代码做了你想做的事情,这肯定是最好的解决方案。如果希望附加值,则可能希望保持文件处于打开状态。

其他一些考虑因素:

  • 除非关闭文件或刷新数据,否则外部程序可能不会立即看到数据。
  • 当您打开该文件时,任何具有该名称的现有文件都将被截断:在此时尝试读取该文件的外部程序不会看到任何内容。
  • 每个输出后的刷新(如果您使用std::endl自动的话),并在每个输出之前寻求开始,将解决前面的问题(如果数据看起来像它看起来的那么小,那么写入将是原子的),但是如果所写的值有不同的长度--文件长度不会缩短--则可能导致误导性数据。(这里可能不是这样的情况,而是一些需要考虑的问题。)

关于性能:您所指的操作最多持续几毫秒,每小时进行一次或两次。它是一毫秒,还是十毫秒,是完全不相关的。

票数 2
EN

Stack Overflow用户

发布于 2013-02-13 13:38:43

首先,在优化之前获取数字,使用分析器。那你就知道哪一部分花的时间最多了。如果你没有一个分析器,在做任何事情之前要想一想。在这3-4个小时里你要跑多少次?如果每次运行只发生一次的事情很少,那么就不太可能成为优化的好目标,如果是大量的运行,那么这些部分也可以考虑,因为磁盘访问可能相当慢。

尽管如此,通过重用流而不是打开和关闭流,我在以前的项目中节省了一些时间。

票数 3
EN

Stack Overflow用户

发布于 2013-02-13 14:58:21

这是过早优化的一个明显的例子

它对您的应用程序的性能没有实际影响,因为在几个小时的范围内,这种情况只发生了5次。

按照前面的答案对应用程序进行分析,并使用它来识别代码中的真正的瓶颈。

我能想到的唯一情况是,如果您想要在应用程序运行时的范围内防止删除/编辑info.txt,那么对您来说有什么关系。在这种情况下,你会想要保持溪流的活力。否则就无所谓了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14854790

复制
相关文章

相似问题

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