2016-05-01 4 views
0

Мне нужно сопоставить тысячи файлов с веб-службы с файлами на диске устройства iOS. В настоящее время я делаю это в цикле и проверяю каждый файл на диске с attributesOfItemAtPath на shared NSFileManager, чтобы проверить, не изменились ли какие-либо файлы по размеру, но он чувствует себя не так. Возможно, цикл по каждому файлу является самым чистым способом, мне все еще интересно, есть ли способ сделать attributesOfItemAtPath для каждого файла в каталоге (как NSArray или NSDictionary), не нанося вреда чрезмерному дисковым ввода-выводам.attributesOfItemAtPath для многих файлов

Код выполняется в цикле, а затем для каждого файла на диске он делает:

fileAttributes = [_Core.fileMgr attributesOfItemAtPath:savePath error:nil]; 

if ([fileAttributes fileSize] != [[image valueForKey:@"filesize"] intValue]) { 
    ... // the file has changed or is new 
} 

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

И наконец; этот код не дает мне медлительность. Я просто задаюсь вопросом, есть ли способ исключить чрезмерный дисковый ввод-вывод, поскольку иногда этот скрипт загружает сотни или тысячи мегабайтов изображений и может занять много времени, а также делает множество обращений к диску. Может быть, что-то возможно на очень низком уровне, например, NSPathUtilities? Я предпочел бы кэшировать 2 ~ 4 МБ памяти для кэширования списка, а затем нажимать на диск тысячи раз без какой-либо добавленной стоимости.

ответ

1

Вам все равно придется выполнять цикл всякий раз, когда вы перезапускаете приложение, но для обработки изменений при запуске приложения вы можете использовать что-то вроде https://github.com/bdkjones/VDKQueue или любую другую систему очередей для просмотра событий файловой системы.

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

+0

Это приятный подход к делу. Я обязательно посмотрю на это. Кажется, что VDK требует GCD, но readme заявляет, что он явно нуждается в OS X. Мне придется проверить это позже сегодня. 7k проверяет файлы на (более старом) iPad 3 занимает около 2 секунд. Это происходит только изначально или при перезагрузке приложения (с интервальным таймером 1 час), так что это не так уж плохо. Я просто в этом хорошем потоке оптимизации, и я пытаюсь выиграть циклы процессора и куски памяти в любом месте, где я могу :). 1+ для наконечника –

Смежные вопросы