Я пытаюсь сравнить два длинных байт-массива в 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 (), а затем сделал то же самое сравнение, тот же код, и он работал примерно за одну секунду (я должен сравнить его еще и сравнить с другими), но если вы делаете то же вещь с локальными переменными и использовать общий массив становится значительно медленнее. Я не уверен, почему, но это вызывает у меня гораздо больше вопросов об использовании массивов.