Comments 6
на моём железе
На каком?
Скорость - это хорошо, а что в плане нагрузки на процессор?
Мои бенчи были однопоточны, без IO, максимум что их может приостановить от 100% нагрузки это очереди на порты процессора из за SIMD или на доступ в память, и то сомнительно.
Если вы про условная "тяжесть" операции сжатия и ее степень, то я не смотрите на мой бенчмарк, он говно, как и чужие бенчмарки тоже. Можно подкрутить данные или параметры так, что zlib уделает brotli всухую.
Лучше сделать свой для своих данных и там решать.
Сейчас обнаружил интересный эффект: BrotliStream на уровне CompressionLevel.Fastest сильно тормозит и относительно плохо сжимает на большом количестве небольших записей:
using System.Diagnostics;
using System.IO.Compression;
File.Delete("test.br");
using var file = File.OpenWrite("test.br");
Stream stream = new BrotliStream(file, CompressionLevel.Fastest);
var data = new byte[16];
var sw = Stopwatch.StartNew();
//stream = new BufferedStream(stream);
for (int i = 100 * 1024 * 1024 / data.Length; i != 0; i--)
{
Random.Shared.NextBytes(data);
await stream.WriteAsync(data);
}
await stream.DisposeAsync();
Console.WriteLine(sw);Если раскомментировать stream = new BufferedStream(stream), сжатие будет в 30 раз быстрее и на четверть компактнее.
Раскрываем мощь Zlib и немного Brotli в .NET