Replace WhenAll with Parallel.ForEach in hashing

This commit is contained in:
Matt Nadareski
2020-10-05 14:34:53 -07:00
parent 4f162fc91d
commit 88f69442df

View File

@@ -67,19 +67,18 @@ namespace SabreTools.Library.IO
try try
{ {
// Get a list of hashers to run over the buffer // Get a list of hashers to run over the buffer
List<Hasher> hashers = new List<Hasher>() List<Hasher> hashers = new List<Hasher>();
{
new Hasher(Hash.CRC), hashers.Add(new Hasher(Hash.CRC));
new Hasher(Hash.MD5), hashers.Add(new Hasher(Hash.MD5));
#if NET_FRAMEWORK #if NET_FRAMEWORK
new Hasher(Hash.RIPEMD160), hashers.Add(new Hasher(Hash.RIPEMD160));
#endif #endif
new Hasher(Hash.SHA1), hashers.Add(new Hasher(Hash.SHA1));
new Hasher(Hash.SHA256), hashers.Add(new Hasher(Hash.SHA256));
new Hasher(Hash.SHA384), hashers.Add(new Hasher(Hash.SHA384));
new Hasher(Hash.SHA512), hashers.Add(new Hasher(Hash.SHA512));
new Hasher(Hash.SpamSum), hashers.Add(new Hasher(Hash.SpamSum));
};
// Initialize the hashing helpers // Initialize the hashing helpers
var loadBuffer = new ThreadLoadBuffer(input); var loadBuffer = new ThreadLoadBuffer(input);
@@ -113,7 +112,7 @@ namespace SabreTools.Library.IO
byte[] buffer = bufferSelect ? buffer0 : buffer1; byte[] buffer = bufferSelect ? buffer0 : buffer1;
// Run hashes in parallel // Run hashes in parallel
await Task.WhenAll(hashers.Select(h => h.Process(buffer, current))); Parallel.ForEach(hashers, Globals.ParallelOptions, async h => await h.Process(buffer, current));
// Wait for the load buffer worker, if needed // Wait for the load buffer worker, if needed
if (next > 0) if (next > 0)