我有一个为流生成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;
答案 0 :(得分:4)
此代码中没有任何可以改进的地方。您已经读取了大块文件。改善性能的唯一机会是在哈希实现本身中。
换句话说,您可以尝试其他哈希实现,以查看其他哈希实现是否更快。一个明显的起点是Synopse项目的开发人员。
您还应该将代码的性能与使用可观的命令行哈希程序获得的性能进行比较。这将使您感觉可以实现哪种性能。