Вопрос

Я использую следующий код, чтобы получить контрольную сумму файла. Он использует 50% процессора во время расчетов.

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();

Что можно сделать, чтобы уменьшить код с использования максимального процессора, кроме Thread.sleep (MS)

С уважением, Кингсли Рувим Дж.

Это было полезно?

Решение

Вы можете использовать Thread.setPriority(int newPriority) Метод для уменьшения приоритета потока. Это приведет к тому, что другие потоки более высокого приоритета будут выполняться чаще. Тем не менее, ваш MD5 не будет рассчитываться как если бы вы оставили приоритет в одиночку - почему вы не хотите, чтобы этот расчет завершился как можно быстрее?

РЕДАКТИРОВАТЬ: Вот Реализация "Fast MD5", что может похвастаться значительным повышением производительности (в среднем на 26%) по сравнению с дефолтом Java java.security.MessageDigest реализация. Смотрите страницу автора для подробной информации, включая примеры кода и тесты. Анкет Код доступен под GNU LGPL 2.1 Лицензия.

Другие советы

Я бы предпочел посвятить приоритетное управление ОС, для Windows вы можете начать свое приложение с

start /low your_executable
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top