Skip to content

oleg-st/ZstdSharp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

ZstdSharp

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

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

About

Port of zstd compression library to c#

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages