0

我正在使用以下代码来获取文件的校验和。它在计算期间使用 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(ms) 之外的最大 CPU

问候, 金斯利·鲁本 J

4

2 回答 2

2

您可以使用该Thread.setPriority(int newPriority)方法来降低线程的优先级。这将导致其他更高优先级的线程被更频繁地执行。但是,您的 MD5 的计算速度不会像您不考虑优先级那样快——您为什么不希望这个计算尽快完成呢?

编辑:这是一个“快速 MD5”实现,与 Java 的默认实现相比,它拥有显着的性能提升(平均快 26%)java.security.MessageDigest。有关详细信息,请参阅作者的页面,包括代码示例基准。该代码在GNU LGPL 2.1 许可下可用。

于 2010-12-14T14:13:06.360 回答
0

我宁愿将优先级管理专用于操作系统,对于 Windows,您可以使用它来启动您的应用程序

start /low your_executable
于 2010-12-14T14:26:04.737 回答