0

我正在做一些长时间的模拟,可能需要几个小时到几天的时间,并且我正在将信息记录到文件中。这些文件可以达到数百 Mb 的大小,并且里面只有一个数字列表。我真的很担心由此产生的开销。我想问一下使用这种方法的开销是否真的很大,是否有其他更有效的方法可以做到这一点,只需记录信息。

我正在使用 C++ 并记录文件,我只使用 fprintf 的常用方法。为了解释开销,如果你可以给出一个类似于使用文件的实际示例,这次使用文件而不使用它们,那将是理想的。

我做了一些测试,但我不知道开销是否随文件大小线性增长。我要说的是,在大小为 1Mb 的文件中添加一行可能与在大小为 1Gb 的文件中添加一行不同。有谁知道开销如何随着文件的大小而增长?

4

3 回答 3

4

我认为你只需要一些粗略的计算。

让“数百 Mb”为 400MB。
让“几个小时到几天”为 48 小时。

(400 * 1024 * 1024 字节) / (3600 * 48 秒) = 2427 字节/秒

显然,您可以只观察您的系统或使用实数进行计算,但使用上面的粗略估计,您记录的速度约为 2KB/秒,与平均硬盘驱动器限制相比,这是微不足道的。

所以,不,开销似乎不是很大。是的,有更有效的方法可以做到这一点,但你可能会花费更多的时间和精力来获得微不足道的节省,除非你的数字与你所说的有很大不同。

于 2009-02-26T17:54:49.753 回答
2

“数百兆字节”在几天内可能无关紧要。数百 GB 可能很重要,但可能仍然不会很大。

但是,有一种明显的方法可以为您的确切应用程序找出答案:在打开日志记录的情况下运行模拟,并对其计时。然后在关闭日志记录的情况下运行它(使用相同的输入)并计时。比较差异。理想情况下,这样做几次以抵消其他干扰。我怀疑您会发现大量日志记录的潜在好处远远超过对性能的影响。

于 2009-02-26T17:50:19.373 回答
1

您可以将数据放入 STL 向量中并对数据进行一些分析,例如:
- 排除重复的行;
- 只保存差异;
- 一段时间后刷新数据;
- 选择要保存的特定数据;
- ETC...

于 2009-02-26T18:07:07.943 回答