- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找计算大文件 (3GB) 哈希值的有效方法,并意识到使用参数 -hashfile
调用 Windows certutil 执行哈希计算比通过 执行哈希计算快 4 倍(16 秒) code>SHA512.Create().ComputeHash
(~60 秒),我不太了解这么大的差异。
我试图“玩”一下 FileStream
的读取缓冲区大小,但它给了我大约 2 秒的时间,所以并不是很重要的优化。
1)通过ComputeHash进行哈希计算:
var sw = Stopwatch.StartNew();
using (var fs = new FileStream(@"C:\Temp\BigFile.dat", FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 1024 * 1024 * 10, options: FileOptions.SequentialScan))
{
Console.WriteLine(BitConverter.ToString(SHA512.Create().ComputeHash(fs)));
}
Console.WriteLine(sw.ElapsedMilliseconds);
2) 通过 certutil 实现
var sw = Stopwatch.StartNew();
var fPath = @"C:\Temp\BigFile.dat";
var p = Process.Start(new ProcessStartInfo(@"certutil", $"-hashfile \"{fPath}\" SHA512") { RedirectStandardOutput = true, UseShellExecute=false});
p.WaitForExit();
Console.WriteLine(p.StandardOutput.ReadToEnd());
Console.WriteLine(sw.ElapsedMilliseconds);
由于代码的托管/ native 性质,我预计时间会有一些差异,但 16 秒与 60 秒看起来有点困惑。
在 this question还提到 native 代码工作得更快,但没有解释这种差异,我最感兴趣的是理解差异。我在想,现在这么简单的例子(IO + 数学?)应该不会有这么大的区别
最佳答案
SHA512 在 .NET 中的三种实现(默认取决于 CryptoConfig.AllowOnlyFipsAlgorithms
属性):
可能是这些实现具有不同的性能。使用每个字符串调用 SHA512.Create(string)
,并比较结果。
关于c# - 为什么 ComputeHash 的执行速度比 certutil -hashfile 慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57305407/
我想保存结果 CertUtil -hashfile "path_to_file" MD5 添加到变量并删除命令行命令中散列的空格(更具体地说,我想在 VS 2015 C++ 的后处理命令行中使用它)。
我正在创建一个简单的 android 应用程序...我在启动 Android Studio 时更新 gradle 时遇到了一些麻烦,它也提示了我。 更新完成后,我收到以下错误: 错误:任务 ':app
我正在寻找计算大文件 (3GB) 哈希值的有效方法,并意识到使用参数 -hashfile 调用 Windows certutil 执行哈希计算比通过 执行哈希计算快 4 倍(16 秒) code>SH
我是一名优秀的程序员,十分优秀!