Подтвердить что ты не робот

Разница между записью в файл атомарно, а не

В чем разница в написании файлов с атомарно на iPhone в objective-c и нет, есть ли разница в производительности между двумя?

Спасибо заранее!

4b9b3361

Ответ 1

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

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

Производительность - это минимальная стоимость. Во время записи у вас будет две копии файла. Замена файла - очень простая операция на уровне файловой системы.

Изменить: спасибо zneak

Ответ 2

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

@Randy, ваши предположения о фрагментации, вероятно, будут неправильными. В большинстве файловых систем запись всего файла и его закрытие приведет к менее фрагментированному файлу, и запись большого файла в одну запись, безусловно, приведет к лучшему использованию больших блоков. Если вы имели в виду, что блоки файлов имеют большую вероятность "ползать" по всему диску, это зависит от настроек макета в вашей файловой системе. Если вы пишете на флеш, вы, вероятно, хотите, чтобы файловая система ползала по доступному хранилищу как своего рода самовыравнивание записей.

Ответ 3

Написание атомарно занимает больше шагов - дополнительно создается вспомогательный файл. NSString Class Reference объясняет:

Если ДА, приемник записывается во вспомогательный файл, а затем вспомогательный файл переименовывается в путь. Если NO, приемник написан прямо к пути. Параметр YES гарантирует, что путь, если он существует в все, не будут повреждены, даже если система должна потерпеть крах во время письменная форма.

Вот пример в случае pLists:

[array writeToFile:path atomically:YES];

когда "ДА", то pList обновляется один раз, даже если вы запустите код несколько раз в XCode,

[array writeToFile:path atomically:NO];

когда "НЕТ" обновляется столько, сколько вы запускаете тот же код (повторное обновление).