Попробуйте
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
// do some work
}
Если у Вас есть много маленьких файлов, Ваше узкое место будет файловым вводом-выводом и вероятно не алгоритмом контрольной суммы.
список А хеш-функций (который может считаться контрольной суммой) может быть найден здесь .
там какая-либо причина, которую Вы не можете использовать дату файловой системы, измененную, чтобы определить, изменился ли файл? Это, вероятно, было бы быстрее.
Существует много быстрых алгоритмов CRC, которые должны добиться цели: http://www.google.com/search?hl=en&q=fast+crc&aq=f&oq=
Редактирование: , Почему ненависть? CRC является полностью соответствующим, как свидетельствуется другими ответами. Поиск Google был также соответствующим, так как никакой язык не был определен. Это - старая, старая проблема, которая была решена так много раз, что, вероятно, не будет категорического ответа.
adler32, доступный в zlib заголовках, рекламируется как являющийся значительно быстрее, чем crc32, будучи незначительно менее точным.
CRC-32 входит в ум главным образом, потому что дешево вычислить
, Любой вид ввода-вывода входит в ум главным образом, потому что это будет ограничивающим фактором для такого обязательства;)
проблема не вычисляет контрольные суммы, проблема состоит в том, чтобы заставить изображения в память вычислять контрольную сумму.
я предложил бы контроль "stagged":
этап 1: проверьте на изменения меток времени файла и если Вы обнаруживаете изменение, там передают...
(не нужный в Вашем случае, как описано в отредактированной версии)
этап 2: получите изображение в память и вычислите контрольную сумму
, Наверняка важную также: многопоточность : установка конвейера, который позволяет обработать нескольких изображений параллельно, если несколько ядер процессора доступны.
You need to add !
< I' d интересоваться слушанием , почему !
необходим как часть этого ответа.
– pkamb
19 September 2015 в 19:59
CRC32, вероятно, достаточно хорош, хотя существует маленькое шанс, Вы могли бы получить коллизию, такую, что файл, который был изменен, мог бы быть похожим на него, не был то, потому что эти две версии генерируют ту же контрольную сумму. Для предотвращения этой возможности, я поэтому предложил бы использовать MD5, который легко будет достаточно быстр, и возможности появления коллизии уменьшается до точки, где это - почти бесконечно малая величина.
, Поскольку другие сказали с большим количеством маленьких файлов, Ваше реальное узкое место производительности будет вводом-выводом, таким образом, проблема имеет дело с этим. Если Вы развесите еще несколько деталей, то кто-то, вероятно, предложит способ уладить это также.
Ваше самое важное требование должно "проверить если измененное содержание".
, Если это самый важный, что ЛЮБОЕ изменение в файле быть обнаруженным, MD-5, SHA-1 или даже SHA-256 должно быть Вашим выбором.
, Учитывая, что Вы указали, что контрольная сумма НЕ быть криптографически хорошим, я рекомендую CRC-32 по трем причинам. CRC-32 дает хорошие расстояния Хемминга по 8K файлу. CRC-32 будет, по крайней мере, порядком величины быстрее, чем MD-5 для вычисления (второе требование). Иногда как важный, CRC-32 только требует, чтобы 32 бита сохранили значение, которое будет сравнено. MD-5 требует 4 раза устройства хранения данных, и SHA-1 требует 5 раз устройства хранения данных.
BTW, любая техника будет усилена путем предварительного ожидания длины файла при вычислении хеша.
Согласно странице Wiki , на которую указывает Luke, MD5 на самом деле быстрее, чем CRC32!
я попробовал это сам при помощи Python 2.6 на Windows Vista и получил тот же результат.
Вот некоторые результаты:
crc32: 162,481544276 Мбайт/с md5: 224,489791549 Мбайт/с
crc32: 168,332996575 Мбайт/с md5: 226,089336532 Мбайт/с
crc32: 155,851515828 Мбайт/с md5: 194,943289532 Мбайт/с
я думаю о том же вопросе также, и я испытываю желание использовать изменение Rsync Адлера 32 для обнаружения различий в файле.
... previousState = stateForConversionView switch previousState! { ...
, Когда что-то упрощено, когда необходимо записать больше кода? Я видел, что и понял в своей реализации что я don' t должен сделать это. That' s, почему я записал этот ответ. Кроме того, Вы сохраняете ЦП и Память даже когда it' s очень очень мало.
– Ginés SM
21 May 2017 в 17:58
Просто приписка к сказанному выше; jpeg использует сжатие с потерями, и степень сжатия может зависеть от программы, используемой для создания jpeg, цветовой палитры и / или битовой глубины в системе, гаммы дисплея, графической карты и установленных пользователем уровней сжатия / настроек цвета. Поэтому сравнение JPEG, созданных на разных компьютерах / платформах или с использованием разного программного обеспечения, будет очень сложно на уровне байтов.
previousState
объявляется, как развернуто, почему он должен был бы развернуть снова вswitch
для создания этой работы? Спасибо. – Unheilig 27 June 2015 в 06:56