提高fopen/fclose场景中的性能

提高fopen/fclose场景中的性能,c,performance,c89,C,Performance,C89,以下情况: 我在一个巨大的程序中编辑一个方法,这个方法经常被调用,但我不知道确切的频率(每次运行的频率不同) 现在我必须将日志添加到txt文件中,每次调用时打开/关闭该文件对整个应用程序来说是一个巨大的瓶颈 仅仅保持文件打开并不是一个真正的选项,因为我不知道这是否是对这个函数的最后一次调用 有没有一种方法可以在不修改呼叫站点的情况下加快速度? 我宁愿避免更改方法签名,因为当我们将工作与我的同事合并时(这里没有工作版本控制)将文件保持打开状态,这会导致问题。当程序调用exit或从main返回时,所

以下情况: 我在一个巨大的程序中编辑一个方法,这个方法经常被调用,但我不知道确切的频率(每次运行的频率不同)

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

仅仅保持文件打开并不是一个真正的选项,因为我不知道这是否是对这个函数的最后一次调用

有没有一种方法可以在不修改呼叫站点的情况下加快速度?

我宁愿避免更改方法签名,因为当我们将工作与我的同事合并时(这里没有工作版本控制)

将文件保持打开状态,这会导致问题。当程序调用
exit
或从
main
返回时,所有文件都将关闭(包括刷新任何挂起的缓冲区)。没有理由在意对日志函数的调用是否是“最后一次调用”。

除了R..之外,您还可以捕获中断或终止信号,然后自己关闭文件。

因此,不要在每次调用时打开和关闭文件。当程序正常终止时,文件将被刷新并关闭。您可能应该在每次日志调用之后使用
fflush()
(尽管这会有一些开销)。但不要每次都打开/关闭电话,因为它太慢了。考虑附加模式-这可能是个好主意。您不需要更改函数的接口;您只需创建一个
静态文件*stdlog=0变量,如果您登录时指针为空,请打开该文件。此后,使用
stdlog
作为日志文件流。如果您不想冒险使用stdlog,请尝试
log\u fp
。在20世纪,没有有效的版本控制是一个愚蠢的错误(冒犯)。在21世纪,它是荒谬的不专业的。@rakib_:stdio已经有了缓冲区。除非您有非常特殊的需求,否则没有理由为自己重新实现缓冲。这可能是一个错误。你到底想达到什么目的?给我们一个更广泛的图片。如果你是基于UNIX或Linux系统,考虑使用<代码> SyScript()/<代码>。