Estoy utilizando el código siguiente para calcular MD5SUM de un archivo -Computing MD5SUM de archivos de gran tamaño en C#
byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));
Esto funciona bien con normalidad, pero si me encuentro con un archivo de gran tamaño (~ 1 GB) - por ejemplo, una imagen iso o un archivo VOB de DVD: obtengo una excepción de falta de memoria.
Sin embargo, puedo calcular el MD5SUM en cygwin para el mismo archivo en aproximadamente 10 segundos.
Sugiera cómo puedo hacer que funcione para archivos grandes en mi programa.
Gracias
Sí. Mono, de hecho, implementa ComputeHash (Stream) leyendo iterativamente en un byte [4096] (http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/corlib/System.Security.Cryptography/HashAlgorithm.cs? revision = 107126 & view = markup). Esperaría que la implementación de MS sea muy similar. En general, usar ReadAllBytes probablemente significa que estás haciendo algo mal. Incluso para archivos cortos, usar un Stream es más elegante. –
Esto es bastante dulce. Intenté soluciones simples de otras publicaciones sobre lectura en un flujo de memoria, etc., pero todas parecían fallar en archivos extremadamente grandes. Esto funciona perfectamente y es súper simple. Gracias :) – mrduclaw