【问题标题】:Should I leave a QFile (or fstream) open?我应该打开 QFile(或 fstream)吗?
【发布时间】:2011-09-04 02:03:38
【问题描述】:
我通常使用两种方法写入文件,使用 Qt 的 QFile 或 STL 的 fstream。
我有一个长时间运行(几分钟)的模拟,它将数据记录到一个文件中。在性能方面和设计方面,这样做是否是个好主意:
- 始终保持打开状态
- 每次写入时关闭和打开
- 介于 (1) 和 (2) 之间
这里有几个问题解决了这个问题(Perl,fopen),但我没有看到任何关于 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 可能会导致此类问题)。看到您只是在记录这似乎不太可能。
但在这种情况下,简单地关闭文件可能会使情况变得更糟,因为虚拟地址空间可能会变得碎片化。
我建议最好让文件始终保持打开状态,除非您认为自己会遇到上述问题。如果您的内存受限,那么刷新数据将减少物理内存需求。