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