Calcolare MD5 Checksum efficiente
Domanda
Sto usando seguente codice per ottenere il checksum di un file. Si utilizza il 50% della CPU durante i calcoli.
MessageDigest md = MessageDigest.getInstance("MD5");
InputStream is = new FileInputStream("C:\\Temp\\Small\\Movie.mp4"); // Size 700 MB
byte [] buffer = new byte [blockSize];
int numRead;
do
{
numRead = is.read(buffer);
if (numRead > 0)
{
md.update(buffer, 0, numRead);
}
} while (numRead != -1);
byte[] digest = md.digest();
Che cosa si può fare per ridurre il codice da utilizzare al massimo CPU diversa Thread.sleep (ms)
saluti, Kingsley Reuben J
Soluzione
Si potrebbe utilizzare il metodo Thread.setPriority(int newPriority)
per ridurre la priorità del thread. Questo si tradurrà in altri thread ad alta priorità in corso di esecuzione più spesso. Tuttavia, il vostro MD5 non sarà calcolato nel più breve tempo se hai lasciato la priorità da solo - perché non si vuole questo calcolo per completare il più rapidamente possibile
Modifica Ecco un'implementazione "Fast MD5" , che vanta un aumento significativo delle prestazioni (26% più veloce in media) più di implementazione predefinita java.security.MessageDigest
di Java. Vedere pagina dell'autore per informazioni dettagliate, tra cui esempi di codice e benchmark . Il codice è disponibile sotto la GNU LGPL 2.1 licenza .
Altri suggerimenti
mi piacerebbe gestione delle priorità piuttosto dedicata a os, per le finestre che si potrebbe iniziare la vostra applicazione con
start /low your_executable