Conversation
| Buffer.BlockCopy(childHash, 0, combinedBuffer, currentOffset, childHash.Length); | ||
| currentOffset += childHash.Length; | ||
| } | ||
|
|
There was a problem hiding this comment.
Стоило бы поправить предупреждения, а то по делу ведь. И по правилам собираться должно без предупреждений.
| private static readonly int MaxDegreeOfParallelism = Environment.ProcessorCount; | ||
| private static readonly SemaphoreSlim FileReadSemaphore = new(MaxDegreeOfParallelism, MaxDegreeOfParallelism); |
There was a problem hiding this comment.
Я бы такими низкоуровневыми вещами не занимался, а оставил бы это штатному пулу потоков. Это не ошибка, но в целом пустая трата усилий.
| private static async ValueTask SemaphoreSlimWaitAsync(CancellationToken cancellationToken) | ||
| { | ||
| await FileReadSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); | ||
| } |
| using var md5 = MD5.Create(); | ||
| return md5.ComputeHash(combinedBuffer); |
There was a problem hiding this comment.
Есть у MD5 статический метод, который делает то же самое (правда, называется как-то по-другому). Объект MD5 тут низачем.
| try | ||
| { | ||
| await using var fileStream = File.OpenRead(filePath); | ||
| using var memoryStream = new MemoryStream(nameBytes.Length + (int)fileStream.Length); |
There was a problem hiding this comment.
Так Вы весть файл в память зачитаете, что не очень, если это какая-нибудь метагеномная сборка в пару терабайт размером.
|
|
||
| return await this.md5.ComputeHashAsync(memoryStream, cancellationToken); | ||
| } | ||
| } No newline at end of file |
There was a problem hiding this comment.
Тут довольно много чего можно унифицировать с параллельной версией (в т.ч. по смыслу — хеш от одного файла всё равно считается последовательно всегда), так что можно было применить немного архитектурной магии (паттерны "Стратегия", "Шаблонный метод" и т.п.) и сократить размер кода в полтора раза. Архитектурную магию мы ещё не проходили, так что это не ошибка, но можно было хоть попытаться :)
No description provided.