我正在使用以下代码获取文件的校验和文件。在计算过程中,它使用了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中减少代码做些什么来减少代码

问候,金斯利·鲁本(Kingsley Reuben J)

有帮助吗?

解决方案

您可以使用 Thread.setPriority(int newPriority) 减少线程优先级的方法。这将导致其他高优先级线程更频繁地执行。但是,您的MD5不会像您独自离开优先级一样快地计算出来 - 为什么您不希望此计算尽快完成?

编辑: 这里有一个 “快速MD5”实施, ,比Java的默认值大大提高性能(平均快26%) java.security.MessageDigest 执行。有关详细信息,请参阅作者页面 代码示例基准. 。该代码可在 GNU LGPL 2.1许可证.

其他提示

我宁愿将优先管理专用于操作系统,因为Windows可以使用

start /low your_executable
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top