Что может быть эффективнее, если держать fstream открытым или открывать его каждый раз, когда его нужно использовать? - PullRequest
0 голосов
/ 07 сентября 2018

Мой вопрос в том, что лучше открывать и закрывать поток, когда программа заканчивается, или открывать его каждый раз, когда я хочу его использовать. Я приведу пример. Это простой класс Лугера:

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;
};

1 Ответ

0 голосов
/ 07 сентября 2018

Как правило, вы хотите оставить файл открытым, потому что ваша программа может быть очень недовольна, если файл каким-то образом заменен пользователем.Например, посмотрите, что произойдет, если вы сохраните редактирование в долговременном скрипте .bat или bash.Также есть проблемы со скоростью открытия и закрытия файлов.

С другой стороны, для подробного ведения журнала во время разработки преимущество заключается в том, что состояние файла журнала закрывается после каждого сообщения, несмотря на любой уровень сбоя, который может даже помешать ОС сохранить любой буферизованный контент даже после его сброса.() и то, что какой-то другой инструмент может вращаться в новых файлах журнала, может означать, что преимущества того стоят, но только для ведения журнала.

С другой стороны, написание собственного файла журнала циклирование не представляет особой сложности(закройте и снова откройте со следующим именем очень мало МБ), и преимущество в скорости сохранения открытого файла может сделать регистрацию более привлекательной.

...