我有一个程序,可能需要3-4个小时才能完成。在进行过程中,我需要将各种信息输出到通用文件"info.txt“中。以下是我目前的做法
char dateStr [9];
char timeStr [9];
_strdate(dateStr);
_strtime(timeStr);
ofstream infoFile("info.txt", ios::out);
infoFile << "foo @ " << timeStr << " , " << dateStr << endl;
infoFile.close();在一次跑步中,我做了五次。我的问题是:从效率和标准的角度来看,这是最合适的吗?
编辑:所谓“一次运行”,我指的是程序的一次运行。所以,“一次运行五次”的意思是,在运行一次程序时,我要向info.txt输出一些东西(这需要3-4个小时)。
发布于 2013-02-13 14:57:50
你到底想做什么还不太清楚。如果你发布的代码做了你想做的事情,这肯定是最好的解决方案。如果希望附加值,则可能希望保持文件处于打开状态。
其他一些考虑因素:
std::endl自动的话),并在每个输出之前寻求开始,将解决前面的问题(如果数据看起来像它看起来的那么小,那么写入将是原子的),但是如果所写的值有不同的长度--文件长度不会缩短--则可能导致误导性数据。(这里可能不是这样的情况,而是一些需要考虑的问题。)关于性能:您所指的操作最多持续几毫秒,每小时进行一次或两次。它是一毫秒,还是十毫秒,是完全不相关的。
发布于 2013-02-13 13:38:43
首先,在优化之前获取数字,使用分析器。那你就知道哪一部分花的时间最多了。如果你没有一个分析器,在做任何事情之前要想一想。在这3-4个小时里你要跑多少次?如果每次运行只发生一次的事情很少,那么就不太可能成为优化的好目标,如果是大量的运行,那么这些部分也可以考虑,因为磁盘访问可能相当慢。
尽管如此,通过重用流而不是打开和关闭流,我在以前的项目中节省了一些时间。
发布于 2013-02-13 14:58:21
这是过早优化的一个明显的例子
它对您的应用程序的性能没有实际影响,因为在几个小时的范围内,这种情况只发生了5次。
按照前面的答案对应用程序进行分析,并使用它来识别代码中的真正的瓶颈。
我能想到的唯一情况是,如果您想要在应用程序运行时的范围内防止删除/编辑info.txt,那么对您来说有什么关系。在这种情况下,你会想要保持溪流的活力。否则就无所谓了。
https://stackoverflow.com/questions/14854790
复制相似问题