保持流打开或每次需要使用时打开它更有效?

What's more efficient to keep the fstream open or to open it every time it needs to be used?

本文关键字:有效      更新时间:2023-10-16

我的问题是,最好打开一个流并在程序结束时关闭它,或者每次我想使用它时打开它。 我举个例子。 这是一个简单的 Looger 类:

class Logger
{
Logger()
{
f.open("log.txt", std::ofstream::trunc);
}
~Logger()
{
f.close();
}
public:
static void log(const std::string& message)
{
static Logger l;
l.f<< message<<'n';
}
private:
std::osftream f;
};

那样会更好吗?

class Logger
{
Logger()
{
f.open("log.txt", std::ofstream::trunc);
f.close()
}
~Logger()
{
}
public:
static void log(const std::string& message)
{
static Logger l;
l.f.open("log.txt", std::ofstream::app);
l.f<< message<<'n';
l.f.close();
}
private:
std::osftream f;
};

通常,您希望保持文件打开状态,因为如果文件以某种方式被用户替换,您的程序可能会非常不满意。例如,查看将编辑保存到长时间运行的 .bat 或 bash 脚本时会发生什么情况。此外,打开和关闭文件时也存在速度问题。

另一方面,对于开发过程中的详细日志记录,日志文件状态在每条消息后关闭的好处,尽管任何级别的崩溃甚至可能阻止操作系统保存任何缓冲的内容,即使在刷新((之后,并且一些其他工具可以在新的日志文件中轮换,这可能意味着这些好处是值得的, 但仅用于日志记录。

另一方面,编写自己的日志文件循环并不是特别困难(关闭并使用下一个名称重新打开很少 MB(,并且保持文件打开的速度优势可能会使日志记录更具吸引力。