Sto usando seguente codice per calcolare MD5SUM di un file -Computing MD5SUM di file di grandi dimensioni in C#
byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));
Questo funziona bene normalmente, ma se ho incontrato un file di grandi dimensioni (~ 1 GB) - per esempio un'immagine ISO o un file VOB DVD - Ricevo un'eccezione Memoria esaurita.
Tuttavia, sono in grado di calcolare l'MD5SUM in cygwin per lo stesso file in circa 10 secondi.
Si prega di suggerire come posso farlo funzionare per file di grandi dimensioni nel mio programma.
Grazie
Sì. Mono implementa infatti ComputeHash (Stream) leggendo iterativamente in un byte [4096] (http://anonsvn.mono-project.com/viewvc/trunk/mcs/class/corlib/System.Security.Cryptography/HashAlgorithm.cs? revision = 107.126 & view = markup). Mi aspetto che l'attuazione della SM sia molto simile. Generalmente, l'uso di ReadAllBytes probabilmente significa che stai facendo qualcosa di sbagliato. Anche per i file brevi, l'utilizzo di uno stream è più elegante. –
Questo è piuttosto dolce. Ho provato soluzioni semplici da altri post sulla lettura di un memorandum, ecc., Ma sembravano tutti fallire per file estremamente grandi. Funziona perfettamente ed è semplicissimo. Grazie :) – mrduclaw