Я пытаюсь сравнить два длинных bytearrays в VB.NET и столкнулся с проблемой. Сравнение двух файлов размером 50 мегабайт занимает почти две минуты, поэтому я явно делаю что-то неправильно. Я нахожусь на x64 машине с тоннами памяти, поэтому проблем там нет. Вот код, который я использую в данный момент, и хотел бы изменить.Каков самый быстрый способ сравнить два байтовых массива?
_Bytes
и item.Bytes
- это два разных массива для сравнения и имеют одинаковую длину.
For Each B In item.Bytes
If B <> _Bytes(I) Then
Mismatch = True
Exit For
End If
I += 1
Next
Мне нужно, чтобы иметь возможность сравнить так быстро, как возможных файлов, которые потенциально сотни мегабайт и даже, возможно, один гигабайт или два. Любые предложения или алгоритмы, которые могли бы сделать это быстрее?
Item.bytes
- объект, взятый из базы данных/файловой системы, который возвращается для сравнения, поскольку его длина байта соответствует элементу, который пользователь хочет добавить. Сравнивая два массива, я могу определить, добавил ли пользователь что-то новое в БД, а если нет, то я могу просто сопоставить их с другим файлом, а не тратить пространство на жестком диске.
[Update]
Я преобразовал массивы локальных переменных Byte(), а затем сделал то же сравнение, тот же код и он побежал в как одну секунду (я должен бенчмарка это еще и сравнить его с другими), но если вы делаете то же самое с локальными переменными и используете общий массив, он становится значительно медленнее. Я не уверен, почему, но для меня возникает гораздо больше вопросов об использовании массивов.
Сравнение двух массивов 50 МБ занимает менее секунды для меня, используя наивный подход. У вас должна быть другая проблема. –
Проверьте http://stackoverflow.com/q/43289/276648, который является тем же вопросом для C#. Много ответов. Мне нравится небезопасная версия http://stackoverflow.com/a/8808245/276648, так как она также будет работать на Mono Linux. – user276648