【发布时间】:2017-10-09 15:54:32
【问题描述】:
以下情况: 我正在一个巨大的程序中编辑一个方法,该方法经常被调用,但我不知道准确的频率(每次运行不同)。
现在我必须将日志记录添加到 txt 文件中,每次调用时打开/关闭文件对整个应用程序来说都是一个巨大的瓶颈。
让文件保持打开状态并不是一个真正的选择,因为我不知道它是否是对该函数的最后一次调用。
有没有办法在不修改调用站点的情况下加快速度?
我宁愿避免更改方法签名,因为当我们将工作与我的同事结合起来时会导致问题(这里没有工作版本控制)
【问题讨论】:
-
所以,不要在每次调用时打开和关闭文件。当您的程序正常终止时,该文件将被刷新并关闭。您可能应该在每次记录调用之后使用
fflush()(尽管这有一些开销)。但是不要打开/关闭每个呼叫——它太慢了。考虑追加模式——这可能是个好主意。您无需更改功能的接口;您只需在文件范围内创建一个static FILE *stdlog = 0;变量,如果在您登录时指针为空,请打开文件。此后,使用stdlog作为日志文件流。如果您不想冒险stdlog,请尝试log_fp。 -
在 20 世纪,没有有效的版本控制是一个愚蠢的错误(冒犯)。在 21 世纪,这是可笑的不专业。
-
@rakib_:stdio 已经有缓冲区。除非您有非常特殊的需求,否则没有理由为此重新实现缓冲。
-
这可能是XY Problem。您实际上想要达到什么目的?给我们一个更广阔的画面。
-
如果您使用的是基于 Unix 或 Linux 的系统,请考虑使用
syslog()。
标签: c performance c89