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

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top