Ну, так как этот вопрос имеет дело с оптимизацией времени работы постоянными факторами, а не порядки, то мы должны быть немного более конкретной информацией о типе файлов вы на самом деле имеющий дело с.
В настоящее время у вас есть два метода сравнения файлов - получение их размера (быстрый и точный) и получение их хэша («медленный» и достаточно точный). Проблема в том, что вычисление хэшей файлов может занять некоторое время, когда размеры файлов не являются незначительными.
Таким образом, в зависимости от типов входов, которые у вас есть на самом деле, вы можете использовать больше операций сравнения, которые находятся где-то между этими двумя (медленнее, чем размер файла, но более точным). Например:
- Если входы представляют собой текстовые файлы, сравнивая хэш на их первое предложение (или первые буквы X) может быть очень хорошим (при условии, не все из них письма, которые начинаются с «Hello World». или любой другой общий шаблон).
- Если ваши входы представляют собой файлы изображений, сравнение их внутренних метаданных (таких как временное/гео-тегирование/какое-то другое поле с не столь общими значениями) также может привести к сравнительно быстрому сравнению, которое позволило бы устранить многие потенциальные равенства.
- Если ваши входные файлы - это просто случайные файлы на веб-сайте для обмена файлами, чтение их первых нескольких байтов должно различать многие из них один из другого из-за заголовков файлового формата (или даже лучше, если это - если ваши пользователи не делают такие вещи, как имена файлов «Hello.jpg» и «Hello.JPEG», то отличить файлы по их суффиксу также будет быстро сравнением)
В общем, если у вас есть много файлов с похожими размерами (именно поэтому вы на самом деле работать на более поздних вычислительные хэш), то есть что у этих файлов есть что-то общее. Учитывая тот факт, что вы знаете, какие типы входов лучше, чем мы сейчас, попробуйте придумать критерии сравнения, которые не требуют, чтобы вы прочитали весь файл и поэтому должны быть быстрее .
Наконец, когда у вас есть все критерии сравнения - примените их для создания «ведер» входов (списки входов с тем же результатом из критериев), начиная с самых быстрых критериев и затем применяя более медленные внутри каждого ведро который имеет более одного входа.
Есть несколько доступных утилит, если вы не хотите писать свои собственные. можете ли вы поделиться кодом, как вы это делаете, может кто-то поможет вам оптимизировать то же самое. – pushpraj
Выполняете ли вы это на самом сервере или каждый раз запрашиваете сервер? – Sayse
Sayse, да, я запускаю код на том же сервере. – RonaDona