我应该打开QFile(或fstream)吗?

时间:2011-05-28 20:32:46

标签: c++ qt file-io io fstream

我通常使用两种方法来写入文件,使用Qt的QFile或STL的fstream。

我有一个长时间运行(几分钟)的模拟,它将数据记录到文件中。在性能方面和设计方面,以下是一个好主意:

  1. 一直打开
  2. 每次写作时关闭并打开
  3. 介于两者之间(1)和(2)
  4. 这里有几个问题解决了这个问题(Perlfopen),但我没有看到任何关于QFile和fstream的讨论。之前的答案建议保持开放(选项1)。这仍然是QFile和fstream的演员吗?

2 个答案:

答案 0 :(得分:3)

性能方面,在应用程序的生命周期中保持打开肯定会更好,因为开放和关闭文件的工作量减少意味着花费更少的时间来完成不会使应用程序接近完成的事情,这会减慢该计划下来。至于设计,只需确保在应用程序终止之前关闭文件。

QFile和fstream可能会在引擎盖下使用fopen,fwrite等(尽管它当然依赖于实现)。所以我敢打赌适用于FILE*的任何内容都适用于QFiles和fstream。

答案 1 :(得分:1)

这可能取决于您的libc实现,但fstream通常使用内存映射文件。这些通常非常有效,只有在写入数据页时才有主内存或交换。

如果您运行的是32位系统并且这些文件非常庞大或者数量很多,那么您可能会遇到耗尽虚拟地址空间的问题(在windows~2GB上可能会导致此类问题)。看来你只是记录这个似乎不太可能。

但是简单地关闭文件可能会使情况变得更糟,因为那时虚拟地址空间可能会碎片化。

我建议最好始终保持文件处于打开状态,除非您认为自己会遇到上述问题。如果您受内存限制,那么刷新数据将减少物理内存需求。