【发布时间】:2019-06-02 09:04:22
【问题描述】:
我正在使用 C# 为大文件编写一个简单的校验和生成器应用程序。它工作得很好,但用户希望看到某种进度条,因为应用程序冻结了几十秒。
这是我使用的一个代码示例(BufferedStream 大大提高了应用程序的性能):
private static string GetSHA5(string file)
{
using (var stream = new BufferedStream(File.OpenRead(file), 1200000))
{
var sha5 = new SHA512Managed();
byte[] checksum_sha5 = sha5.ComputeHash(stream);
return BitConverter.ToString(checksum_sha5).Replace("-", String.Empty);
}
}
我的问题是,是否有可能获得缓冲区“进度”?因为我猜它在内部进行了某种划分和循环。
【问题讨论】:
-
你想知道哈希计算的进度还是缓冲区加载的进度?
-
我想您可以创建一个自定义流后代并传入,它充当适配器,在代表 SHA 从底层流中读取时报告进度。
-
您可以添加一个计时器,然后将流位置除以流长度。 SHA 正在读取块。见源:referencesource.microsoft.com/#mscorlib/system/security/…
-
我想知道哈希计算的进度。 @500-InternalServerError 您的意思是创建一个继承 BufferedStream 的自定义类?我不确定是否理解您的解决方案。
-
@jdweng 虽然我不知道如何获取流位置并将其包含在我的代码中,但这可能是一个很好的解决方案。
标签: c# bufferedstream