ZstdSharp is a port of zstd compression library to С#
Based on Zstandard v1.5.6
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
12th Gen Intel Core i7-12700, 1 CPU, 20 logical and 12 physical cores
.NET SDK 8.0.205
[Host] : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2
.NET 8.0 : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2
Compression level 1
| Method | Mean | Error | StdDev | Ratio |
|---|---|---|---|---|
| CompressNative | 24.590 ms | 0.0499 ms | 0.0442 ms | 1.00 |
| CompressSharp | 29.681 ms | 0.0409 ms | 0.0362 ms | 1.21 |
| DecompressNative | 5.769 ms | 0.0217 ms | 0.0203 ms | 1.00 |
| DecompressSharp | 6.033 ms | 0.0206 ms | 0.0183 ms | 1.05 |
Compression level 5
| Method | Mean | Error | StdDev | Ratio |
|---|---|---|---|---|
| CompressNative | 70.167 ms | 1.1738 ms | 0.9802 ms | 1.00 |
| CompressSharp | 83.226 ms | 0.8946 ms | 0.7931 ms | 1.19 |
| DecompressNative | 6.283 ms | 0.0317 ms | 0.0281 ms | 1.00 |
| DecompressSharp | 6.953 ms | 0.0233 ms | 0.0218 ms | 1.11 |
Compression level 15
| Method | Mean | Error | StdDev | Ratio |
|---|---|---|---|---|
| CompressNative | 2,313.422 ms | 12.1522 ms | 11.3671 ms | 1.00 |
| CompressSharp | 2,088.364 ms | 7.1917 ms | 6.3752 ms | 0.90 |
| DecompressNative | 5.476 ms | 0.0470 ms | 0.0439 ms | 1.00 |
| DecompressSharp | 5.852 ms | 0.0463 ms | 0.0433 ms | 1.07 |