我有一个程序可能需要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个小时)。
答案 0 :(得分:3)
首先;在优化之前获取数字,使用分析器。然后你知道哪些部分花费的时间最多。 如果您没有分析器,请在做任何事之前先想一想。在3-4个小时内你会做多少次跑步?如果每次运行只发生一次的事情可能不太可能成为优化的良好目标,如果有很多很多运行,那么这些部分也可以考虑,因为光盘访问可能相当慢。
话虽如此,我通过重用流而不是打开和关闭,在以前的项目中节省了一些时间。
答案 1 :(得分:2)
你并不清楚自己要做什么。如果代码你 帖子做你想要的,它肯定是最好的解决方案。如果 你想要值追加,那么你可能想保留 文件打开。
其他一些注意事项:
除非您关闭文件或刷新数据,否则为外部 程序可能无法立即查看数据。
当您打开文件时,任何具有该名称的现有文件都将是 截断:尝试读取文件的外部程序 正好这一刻看不到任何东西。
每次输出后刷新(如果使用std::endl
则自动),
并且在每次输出之前寻求开始,将解决
以前的问题(如果数据看起来很小,那么
写将是原子的,但如果可能导致误导数据
写的值有不同的长度---文件长度会
不缩短。 (可能不是
案件在这里,但需要考虑的事情。)
关于表现:你正在谈论一项行动 它最多持续几毫秒,并且会发生 每小时一次或两次。是否需要一毫秒,或 十,完全无关紧要。
答案 2 :(得分:0)
对于您采用的方法,您所采用的方法并没有实际差异,因为这种情况在几个小时的范围内只发生了5次。
将您的应用程序配置为建议的上一个答案,并使用它来识别代码中的 REAL 瓶颈。
只有在我想要阻止在应用程序运行时范围内删除/编辑info.txt
的情况下,我才能想到它对您来说至关重要。在这种情况下,您希望保持流存活。否则没关系。