MD5チェックサムを効率的に計算します
質問
次のコードを使用して、ファイルのチェックサムを取得しています。計算中にCPUの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();
swree.sleep(MS)以外の最大CPUを使用してコードを減らすために何ができるか(MS)
よろしく、キングスリー・ルーベンj
解決
使用できます Thread.setPriority(int newPriority)
スレッドの優先順位を減らす方法。これにより、他のより優先度の高いスレッドがより頻繁に実行されます。ただし、MD5は優先順位を単独で去ったかのように迅速に計算されません。この計算をできるだけ早く完了したいのはなぜですか?
編集: がここにあります 「高速MD5」の実装, 、Javaのデフォルトよりも大幅なパフォーマンスの増加(平均で26%高速)を誇る java.security.MessageDigest
実装。詳細については、著者のページを参照してください。 コードの例 と ベンチマーク. 。コードはの下で利用できます GNU LGPL 2.1ライセンス.
他のヒント
私はむしろOSに優先管理を捧げたいと思います。Windowsについては、アプリを始めることができます
start /low your_executable
所属していません StackOverflow