【问题标题】:fopen/fclose performancefopen/fclose 性能
【发布时间】:2010-12-22 06:31:49
【问题描述】:

通常,大多数产品都实现了日志文件机制。就 fopen / fclose 性能而言,编写调试日志文件的最佳实践是什么。保持文件指针打开(如果启用记录器)是一个好的选择还是每次需要将某些语句写入日志文件时频繁打开和关闭文件指针?

【问题讨论】:

  • 既然是C++,为什么不用fstream呢?
  • 如果您在每次记录操作后使用fflush(),您可以将丢失任何已写入数据的风险降至最低。有一点开销,但这个开销比打开和关闭文件的开销要少得多。
  • @juraj :我也可以使用 fstream,但我的问题是关于打开和关闭文件处理程序。即使使用了 fstream,我们也需要打开和关闭文件流。
  • @jonanthan: 不担心数据丢失。thnx
  • 如果使用 fstream,您必须只打开文件,如果需要,您可以关闭它,但您不必这样做,因为它将在析构函数中关闭。

标签: c++ fopen


【解决方案1】:

理想情况下,您不应该在最后关闭日志文件。通常许多产品也有一些“崩溃处理”机制,在任何情况下都会在应用程序终止之前调用。这将是关闭日志文件的最佳位置。

windows可以查看SetUnhandledExceptionFilter

【讨论】:

    【解决方案2】:

    通常,这取决于您正在与之交互的文件类型。当然,二进制文件在读取时必须打开。如果文件是纯文本,您可以将文本解析为字符串并立即关闭文件。

    我想说你应该在整个程序生命周期内保持文件指针打开,但如果你遇到崩溃,它永远不会关闭。然后我会建议在相对安全和低风险的操作过程中保持打开状态,但在您对应用程序的稳定性不满意时不断打开/关闭它。没有人希望文件指针保持打开状态。 :)

    【讨论】:

      【解决方案3】:

      根据您可以使用fstream 的评论。只需在开头打开一个ofstream,程序结束时它就会关闭。使用fstream 代替 C 风格的 fopen/close 使很多事情变得更容易,因为它符合 RAII 原则,因此您不必担心文件关闭。每次您想要记录某些内容时,可能没有理由手动关闭文件并再次打开它。如果您不想同时从另一个程序写入同一个文件,那么定期打开和关闭文件只是浪费时间和代码。

      【讨论】:

        【解决方案4】:

        我通常记录到内存(一个变量),并且只在应用程序完成时将其写入文件一次。当然,如果应用程序崩溃,或者您需要在程序运行时读取日志,这不会有多大好处,但这对我来说通常不是问题,并且性能优越。我猜这取决于你的需求。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-04
          • 2014-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-05
          相关资源
          最近更新 更多