Почему не стоит открывать файл перед каждой записью и закрывать его сразу после каждой записи? - PullRequest
2 голосов
/ 02 октября 2019

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

Интуитивно я бы сказал, что этот подход требует гораздо больше времени, чем запись в буфер и заднюю часть. запись в файл. Но я уверен, что есть лучшее объяснение этому. Может кто-нибудь меня просветить?

Ответы [ 2 ]

4 голосов
/ 02 октября 2019

Давайте подведем итог:

Открытие и закрытие файла для каждой отдельной операции записи, когда запланировано много таких операций, является плохой идеей, потому что:

  1. Это ужаснонеэффективно.
  2. Требуется дополнительный поиск в конце файла для добавления.
  3. Он утрачивает атомарность, то есть файл может быть переименован, перемещен, удален, записан или заблокированкем-то еще между операциями записи.
1 голос
/ 02 октября 2019

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

Если вы неоднократно открываете и закрываете файл для каждой операции записи, этот шанс сбоя значительно увеличивается.

Кроме того, при получении запрашиваются дополнительные издержки. и освобождение ресурсов (например, файлов). Вы бы заметили это больше, если бы вы получали и открывали доступ на запись к файлу каждый раз, когда вам нужно было писать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...