我使用以下代码来获取文件的校验和。它在计算过程中使用了50%的CPU。
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以外的最大CPU (Ms)
致敬,金斯利·鲁本·J
发布于 2010-12-14 22:13:06
您可以使用Thread.setPriority(int newPriority)方法来降低线程的优先级。这将导致其他更高优先级的线程更频繁地执行。但是,MD5的计算速度不会像不考虑优先级那样快--为什么不希望这个计算尽可能快地完成呢?
编辑:这里的是一个"Fast MD5" implementation,它的性能比的默认java.security.MessageDigest实现有了显著的提高(平均快了26%)。有关详细信息,请参阅作者的页面,包括code examples和benchmarks。代码可以在GNU LGPL 2.1 license下找到。
发布于 2010-12-14 22:26:05
我宁愿把优先级管理献给os,对于windows,你可以用它来启动你的应用。
start /low your_executablehttps://stackoverflow.com/questions/4440018
复制相似问题