2011-05-28 86 views
2

我通常使用两种方法写入文件,无论是Qt的QFile还是STL的fstream。我应该让QFile(或fstream)打开吗?

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

  1. 保持打开状态的整个时间
  2. 关闭和开放的每一个写
  3. 介于两者之间(1)和(2)

在这里有几个问题,解决这个问题(为Perl,为fopen),但我没有看到一个QFile和fstream的任何讨论。以前的答案建议保持开放(选项1)。这仍然是QFile和fstream的演员吗?

回答

3

在性能方面,它肯定会是更好地保持打开的应用程序的生命,只是因为工作少打开和关闭文件意味着花更少的时间做的事情,不要移动应用程序接近完成,这将减慢程序。至于设计,只要确保在应用程序终止前关闭文件。

一个QFile和fstream的可能的fopen,FWRITE等使用引擎盖下(虽然这当然是实施相关的)。所以我敢打赌,任何适用于FILE*的东西都适用于QFiles和fstreams。

1

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

如果您运行的是32位系统,并且这些文件非常大或非常多,那么你可以有排气(在Windows〜2GB可能导致这样的问题)的虚拟地址空间的问题。看到你只是简单地记录这一点似乎不太可能。

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

我会建议,这是最好的,除非你认为你会碰到的问题上面留在任何时候都打开的文件。如果您受到内存限制,则刷新数据将减少物理内存要求。

+0

你从哪里得到这些信息?我觉得你有点困惑。 – 2011-05-28 22:03:59

+0

这里有什么特别的问题吗? – eyesathousand 2011-05-28 22:07:37