ZstdSharp

July 17, 2025 · View on GitHub

NuGet package NuGet package

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+

Usage

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);

Benchmark

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

MethodMeanErrorStdDevRatio
CompressNative25.034 ms0.0512 ms0.0427 ms1.00
CompressSharp24.111 ms0.0501 ms0.0391 ms0.96
DecompressNative5.218 ms0.0094 ms0.0084 ms1.00
DecompressSharp5.860 ms0.0123 ms0.0109 ms1.12

Compression level 5

MethodMeanErrorStdDevRatio
CompressNative70.964 ms0.3672 ms0.3255 ms1.00
CompressSharp79.834 ms0.2525 ms0.1971 ms1.13
DecompressNative6.148 ms0.0446 ms0.0395 ms1.00
DecompressSharp6.712 ms0.0132 ms0.0117 ms1.09

Compression level 15

MethodMeanErrorStdDevRatio
CompressNative2,214.733 ms10.8125 ms10.1140 ms1.00
CompressSharp1,987.616 ms6.2307 ms5.8282 ms0.90
DecompressNative5.285 ms0.0104 ms0.0087 ms1.00
DecompressSharp5.670 ms0.0116 ms0.0103 ms1.07