我正在进行一些长时间的模拟,可能需要几个小时到几天,我将信息记录到文件中。文件可以达到数百Mb的大小,里面只有一个数字列表。我真的很担心这会产生的开销。我想问一下使用这种方法的开销是否真的很大,如果还有其他更有效的方法来做同样的事情,只需记录日志信息。
我正在使用C ++并记录文件我只使用fprintf的常用方法。如果你能给出一个类似的实际例子来解释开销,那么这次使用文件需要花费这些时间而不使用它们,这将是理想的。
我做了一些测试,但我不知道开销是否与文件大小成线性增长。我所说的是,对于大小为1Mb的文件而言,添加一行可能与大小为1Gb的文件不同。有谁知道开销如何随着文件的大小而增长?。
答案 0 :(得分:4)
我认为你只需要一些背后的计算。
让“数百Mb”为400MB 让“几小时到几天”为48小时。
(400 * 1024 * 1024字节)/(3600 * 48秒)= 2427字节/秒
显然,您可以只是观察您的系统或使用实数进行计算,但使用上面的粗略估计值,您记录的速度约为2KB /秒,与平均硬盘驱动器限制相比,这非常简单。
所以,不,开销似乎不是很大。是的,有更有效的方法,但你可能会花费更多的时间和精力,除非你的数字与你所说的非常不同,否则你得到的微不足道的节省是值得的。
答案 1 :(得分:2)
“数百兆”可能在几天内无关紧要。数百GB可能很重要,但可能仍然不会很大。
有一种明显的方法可以找到确切应用的答案:运行带有日志记录的模拟,然后计算时间。然后在关闭日志的情况下运行它(使用相同的输入)并计时。比较差异。理想情况下,这样做几次以抵消其他干扰。我怀疑你会发现大量日志记录的潜在好处远大于性能损失。
答案 2 :(得分:1)
您可以将数据放入STL向量中并对您的数据进行一些分析,例如:
- 排除重复的行;
- 只保存差异;
- 几次后刷新数据;
- 选择要保存的特定数据;
- 等......