什么更有效的方法是保持fstream开放或每次需要使用时打开它?

问题描述 投票:0回答:1

我的问题是,打开一个流并在程序结束时关闭它或者每次我想要使用它时打开它更好。我举一个例子。这是一个简单的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;
};
c++ performance logging coding-style fstream
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.