Должен ли я оставить QFile (или fstream) открытым? - PullRequest
2 голосов
/ 29 мая 2011

Я обычно использую два метода для записи в файлы, либо с Qtile Qtile, либо с потоком STL.

У меня длительная (несколько минут) симуляция, которая записывает данные в файл.С точки зрения производительности и дизайна, это хорошая идея:

  1. Держать его открытым все время
  2. Закрыть и открыть при каждой записи
  3. Где-то в-в промежутке между (1) и (2)

Несколько вопросов здесь решают эту проблему (для Perl , для fopen ), но я не сделалсмотрите любое обсуждение QFile и fstream.Предыдущие ответы предлагают оставить его открытым (вариант 1).Это все еще актеры для QFile и fstream?

Ответы [ 2 ]

3 голосов
/ 29 мая 2011

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

QFile и fstream, вероятно, используют fopen, fwrite и т. Д. Под капотом (хотя это, конечно, зависит от реализации). Поэтому я бы поспорил, что все, что относится к FILE* s, применимо к QFiles и fstreams.

1 голос
/ 29 мая 2011

Это может зависеть от вашей реализации libc, но fstream обычно использует файлы с отображением в памяти. Как правило, они очень эффективны, и только основная память или подкачка, когда страница данных записывается в.

Если вы используете 32-разрядную систему, и эти файлы очень большие или очень многочисленные, у вас могут возникнуть проблемы с исчерпанием виртуального адресного пространства (в Windows ~ 2 ГБ могут возникнуть такие проблемы). Поскольку вы просто регистрируетесь, это кажется маловероятным.

Но простое закрытие файлов в этом случае может ухудшить ситуацию, поскольку тогда виртуальное адресное пространство может стать фрагментированным.

Я бы советовал, чтобы файлы оставались открытыми всегда, если только вы не думаете, что столкнетесь с вышеуказанными проблемами. Если у вас недостаточно памяти, очистка данных приведет к снижению требований к физической памяти.

...