Estoy tratando de comparar dos bytearrays largos en VB.NET y me he encontrado con un problema. Comparar dos archivos de 50 megabytes lleva casi dos minutos, así que claramente estoy haciendo algo mal. Estoy en una máquina x64 con toneladas de memoria, así que no hay problemas allí. Aquí está el código que estoy usando en este momento y me gustaría cambiar.¿Cuál es la forma más rápida de comparar matrices de dos bytes?
_Bytes
y item.Bytes
son las dos matrices diferentes para comparar y ya tienen la misma longitud.
For Each B In item.Bytes
If B <> _Bytes(I) Then
Mismatch = True
Exit For
End If
I += 1
Next
que necesitan ser capaces de comparar tan rápido como posibles archivos que son potencialmente cientos de megabytes e incluso, posiblemente, un gigabyte o dos. ¿Alguna sugerencia o algoritmo que podría hacer esto más rápido?
Item.bytes
es un objeto tomado de la base de datos/sistema de archivos que se devuelve para comparar, porque su longitud de bytes coincide con el elemento que el usuario desea agregar. Al comparar las dos matrices, puedo determinar si el usuario ha agregado algo nuevo a la base de datos, y si no, puedo asignarlas al otro archivo y no perder espacio en el disco duro.
[Actualización]
que convierte las matrices de variables locales de Byte() y luego hizo la misma comparación, el mismo código y se corrieron en como un segundo (tengo que referencia todavía y compararlo con los demás), pero si haces lo mismo con las variables locales y usas una matriz genérica, se volverá masivamente más lenta. No estoy seguro de por qué, pero plantea muchas más preguntas sobre el uso de matrices.
La comparación de dos matrices de 50MB toma menos de un segundo para mí con el enfoque ingenuo. Deberías tener otro problema. –
Compruebe http://stackoverflow.com/q/43289/276648 que es la misma pregunta para C#. Muchas respuestas Me gusta la versión insegura http://stackoverflow.com/a/8808245/276648 ya que también se ejecutará en Mono Linux. – user276648