Pull to refresh

Comments 6

на моём железе

На каком?

AMD Ryzen 9 5900X 12-Core Processor

Но мне кажется смысл имеет только отношение одного к другому, абсолютные цифры не так важны.

Рекомендую обратить внимание на Zstandard. Порт для .NET ZstdSharp. С 24 года поддерживается всеми браузерами.

Скорость - это хорошо, а что в плане нагрузки на процессор?

Мои бенчи были однопоточны, без 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 раз быстрее и на четверть компактнее.

Sign up to leave a comment.

Articles