【问题标题】:Should I leave a QFile (or fstream) open?我应该打开 QFile(或 fstream)吗?
【发布时间】:2011-09-04 02:03:38
【问题描述】:

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

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

  1. 始终保持打开状态
  2. 每次写入时关闭和打开
  3. 介于 (1) 和 (2) 之间

这里有几个问题解决了这个问题(Perlfopen),但我没有看到任何关于 QFile 和 fstream 的讨论。先前的答案建议保持打开状态(选项1)。这仍然是 QFile 和 fstream 的演员吗?

【问题讨论】:

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


    【解决方案1】:

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

    QFile 和 fstream 可能在底层使用 fopen、fwrite 等(尽管它当然取决于实现)。所以我敢打赌,任何适用于FILE*s 的东西都适用于 QFiles 和 fstreams。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 您从何处获得此信息?我觉得你有点困惑。
      • 这里有什么特别的问题吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多