Delphi:快速传输到sha256以获取大文件(100 MB)

时间:2019-05-22 15:04:30

标签: delphi

我有一个为流生成sha256的函数。对于100 MB FileStream,此功能大约需要5秒钟。有什么技巧可以使其更快?

function GetStreamToHashSHA256Hex(const Content: TStream): string;
const
  //ChunkSize = $F000; // 61440
  ChunkSize = 1024*1024; // 1 mb
var
  aHashSHA2:  THashSHA2;
  aBytes:     TBytes;
  aBytesRead: Integer;
begin
  aHashSHA2 := THashSHA2.create;

  SetLength(aBytes, ChunkSize);
  try
    //Content.Seek(0, soBeginning);
    Content.Position := 0;

    repeat
      aBytesRead := Content.Read(aBytes, ChunkSize);
      if (aBytesRead = 0) then Break; // Done
      aHashSHA2.Update(aBytes, aBytesRead);
    until False;

    //Content.Seek(0, soBeginning);
    Content.Position := 0;

    Result := aHashSHA2.HashAsString;
  finally
    aHashSHA2.Reset;
    aBytes := nil;
  end;
end;

1 个答案:

答案 0 :(得分:4)

此代码中没有任何可以改进的地方。您已经读取了大块文件。改善性能的唯一机会是在哈希实现本身中。

换句话说,您可以尝试其他哈希实现,以查看其他哈希实现是否更快。一个明显的起点是Synopse项目的开发人员。

您还应该将代码的性能与使用可观的命令行哈希程序获得的性能进行比较。这将使您感觉可以实现哪种性能。

相关问题