改善fopen/fclose场景中的性能

问题描述:

以下情况: 我正在编辑一个庞大的程序中的单个方法,该程序经常被调用,但我不知道每次运行的频率如何(每次运行都不相同)。改善fopen/fclose场景中的性能

现在,我必须将日志记录添加到txt文件,每次调用时打开/关闭文件对整个应用程序来说都是一个巨大的瓶颈。

只是将文件打开并不是一个真正的选项,因为我不知道它是否是最后一次调用此函数。

有没有办法在不修改调用网站的情况下加快速度?
我宁愿避免更改方法签名,因为当我们将工作与我的同事结合使用时(这里没有工作版本控制),会导致问题

+3

因此,不要在每次通话时打开和关闭文件。当程序正常结束时,文件将被刷新并关闭。你可能应该在每次调用日志之后使用'fflush()'(尽管这有一些开销)。但不要打开/关闭每个电话 - 这太慢了。考虑追加模式 - 这可能是一个好主意。您不需要将界面更改为功能;您只需在文件范围内创建一个'static FILE * stdlog = 0;'变量,并且在记录时指针为空,则打开该文件。之后,使用'stdlog'作为日志文件流。如果您不想冒'stdlog'的风险,请尝试'log_fp'。 –

+0

使用缓冲区进行日志记录,一旦日志缓冲区已满,将其写入文件。 –

+3

而在20世纪,没有工作版本控制是一个愚蠢的错误(进攻)。在21世纪,这是荒谬的不专业。 –

使文件保持打开状态。当程序调用exit或从main返回时,所有文件都将关闭(其中包括刷新所有待处理的缓冲区)。没有理由关心对日志功能的调用是否是“最后一次调用”。

除了R ..的answer之外,您还可以捕获中断或终止信号并自行关闭文件。