Port of zstd compression library to c#
ZstdSharp is a port of zstd compression library to С#
Based on Zstandard v1.5.7
Supports .NET Core 3.1, .NET 5+, .NET Standard 2.0+, .NET Framework 4.6.1+
ZstdSharp has an unsafe API much the same as zstd.
There are also safe wrappers.
Compress data:
var src = File.ReadAllBytes("dickens");
using var compressor = new Compressor(level);
var compressed = compressor.Wrap(src);
Decompress data:
var src = File.ReadAllBytes("dickens.zst");
using var decompressor = new Decompressor();
var decompressed = decompressor.Unwrap(src);
Streaming compression:
using var input = File.OpenRead("dickens");
using var output = File.OpenWrite("dickens.zst");
using var compressionStream = new CompressionStream(output, level);
input.CopyTo(compressionStream);
Streaming decompression:
using var input = File.OpenRead("dickens.zst");
using var output = File.OpenWrite("dickens");
using var decompressionStream = new DecompressionStream(input);
decompressionStream.CopyTo(output);
Multi-threaded compression:
using var input = File.OpenRead("dickens");
using var output = File.OpenWrite("dickens.zst");
using var compressionStream = new CompressionStream(output, level);
compressionStream.SetParameter(ZSTD_cParameter.ZSTD_c_nbWorkers, Environment.ProcessorCount);
input.CopyTo(compressionStream);
Best performance is achieved on .NET
. System.Runtime.Intrinsics
namespace is required for hardware accelerated bit and vector operations. .NET Standard
and .NET Framework
will use software implementation
Comparision zstd
(native) and ZstdSharp
BenchmarkDotNet v0.15.2, Windows 10 (10.0.19045.6093/22H2/2022Update)
12th Gen Intel Core i7-12700 2.10GHz, 1 CPU, 20 logical and 12 physical cores
.NET SDK 9.0.302
[Host] : .NET 9.0.7 (9.0.725.31616), X64 RyuJIT AVX2
.NET 9.0 : .NET 9.0.7 (9.0.725.31616), X64 RyuJIT AVX2
Compression level 1
Method | Mean | Error | StdDev | Ratio |
---|---|---|---|---|
CompressNative | 25.034 ms | 0.0512 ms | 0.0427 ms | 1.00 |
CompressSharp | 24.111 ms | 0.0501 ms | 0.0391 ms | 0.96 |
DecompressNative | 5.218 ms | 0.0094 ms | 0.0084 ms | 1.00 |
DecompressSharp | 5.860 ms | 0.0123 ms | 0.0109 ms | 1.12 |
Compression level 5
Method | Mean | Error | StdDev | Ratio |
---|---|---|---|---|
CompressNative | 70.964 ms | 0.3672 ms | 0.3255 ms | 1.00 |
CompressSharp | 79.834 ms | 0.2525 ms | 0.1971 ms | 1.13 |
DecompressNative | 6.148 ms | 0.0446 ms | 0.0395 ms | 1.00 |
DecompressSharp | 6.712 ms | 0.0132 ms | 0.0117 ms | 1.09 |
Compression level 15
Method | Mean | Error | StdDev | Ratio |
---|---|---|---|---|
CompressNative | 2,214.733 ms | 10.8125 ms | 10.1140 ms | 1.00 |
CompressSharp | 1,987.616 ms | 6.2307 ms | 5.8282 ms | 0.90 |
DecompressNative | 5.285 ms | 0.0104 ms | 0.0087 ms | 1.00 |
DecompressSharp | 5.670 ms | 0.0116 ms | 0.0103 ms | 1.07 |