Snappier

High performance C# implementation of the Snappy compression algorithm

OTHER License

Stars
32

Bot releases are visible (Hide)

Snappier - release/1.1.6 Latest Release

Published by brantburnett 8 months ago

What's Changed

Full Changelog: https://github.com/brantburnett/Snappier/compare/release/1.1.5...release/1.1.6

Snappier - release/1.1.5

Published by brantburnett 9 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/brantburnett/Snappier/compare/release/1.1.4...release/1.1.5

Snappier - release/1.1.4

Published by brantburnett 9 months ago

This release primarily includes performance improvements around stream decompression in .NET 8, but does show some minor decompression improvements on other runtimes (except .NET 4.8 which is not a priority). Also includes a bug fix for a stream decompression corner case.

What's Changed

Decompression Benchmarks

BenchmarkDotNet v0.13.10, Windows 11 (10.0.22621.3007/22H2/2022Update/SunValley2)
12th Gen Intel Core i7-1270P, 1 CPU, 16 logical and 12 physical cores
.NET SDK 8.0.101

Method Runtime Build PGO Mean Error StdDev Ratio RatioSD Rank
BlockDecompress .NET Framework 4.8 Previous N 14.55 us 0.089 us 0.079 us 1.00 0.00 1
BlockDecompress .NET Framework 4.8 Default N 15.78 us 0.189 us 0.158 us 1.08 0.01 2
BlockDecompress .NET 6.0 Previous N 12.99 us 0.151 us 0.134 us 1.00 0.00 2
BlockDecompress .NET 6.0 Default N 12.75 us 0.181 us 0.170 us 0.98 0.02 1
BlockDecompress .NET 8.0 Previous N 10.57 us 0.208 us 0.214 us 1.00 0.00 2
BlockDecompress .NET 8.0 Default N 10.30 us 0.163 us 0.152 us 0.97 0.02 1
BlockDecompress .NET 8.0 Previous Y 10.51 us 0.198 us 0.194 us 1.00 0.00 2
BlockDecompress .NET 8.0 Default Y 10.15 us 0.173 us 0.162 us 0.97 0.02 1
Method Runtime Build PGO Mean Error StdDev Ratio RatioSD Rank
StreamDecompress .NET Framework 4.8 Previous N 337.3 us 6.35 us 5.94 us 1.00 0.00 1
StreamDecompress .NET Framework 4.8 Default N 332.4 us 5.09 us 4.51 us 0.99 0.02 1
StreamDecompress .NET 6.0 Previous N 164.9 us 2.57 us 2.40 us 1.00 0.00 2
StreamDecompress .NET 6.0 Default N 161.2 us 3.21 us 3.29 us 0.98 0.02 1
StreamDecompress .NET 8.0 Previous N 194.4 us 2.16 us 2.02 us 1.00 0.00 2
BlockDecompress .NET 8.0 Default N 189.6 us 2.59 us 2.42 us 0.98 0.02 1
StreamDecompress .NET 8.0 Previous Y 201.7 us 4.01 us 4.45 us 1.00 0.00 2
StreamDecompress .NET 8.0 Default Y 176.6 us 3.49 us 3.43 us 0.87 0.03 1

Full Changelog: https://github.com/brantburnett/Snappier/compare/release/1.1.3...release/1.1.4

Snappier - release/1.1.3

Published by brantburnett 11 months ago

Snappier - 1.1.2

Published by brantburnett 12 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/brantburnett/Snappier/compare/release/1.1.1...release/1.1.2

Snappier - 1.1.1

Published by brantburnett over 1 year ago

This release includes some fixes to logic that could have caused unsafe memory access in cases where GC rearranges memory if they occurred at the precise moment when an out-of-range reference was on the stack. These moments are very short-lived and should be impossible to create intentionally, but they still represent a security risk.

What's Changed

Full Changelog: https://github.com/brantburnett/Snappier/compare/release/1.1.0...release/1.1.1

Snappier - 1.1.0

Published by brantburnett over 1 year ago

Breaking Changes

This release no longer includes explicit support for the unsupported runtimes .NET Core 3.0/3.1 or .NET 5.0. These runtimes are now supported via the .NET Standard 2.0 target. While they should still function, it is untested and the lack of hardware intrinsic support will most likely result in degraded performance compared to 1.0.

What's Changed

  • All use of GC pinning and fixed buffers has been replaced with byte references and System.Runtime.CompilerServices.Unsafe. This should have less impact on garbage collection performance, especially on systems with continuous Snappy load.
  • Reduced heap allocations
  • Ported some performance improvements from the reference implementation that were added since the original port
  • Lots more performance tweaks

Performance

This release sees a consistent improvement in both compression and decompression performance across all supported frameworks on my Core i7-10850H CPU, especially on decompression. On .NET 6, the time was reduced by 18% when compressing 64KB of HTML and 52% when decompressing. In some cases, the decompression time is reduced by as much as 66%.

ChartGo
ChartGo (1)

Changelog

Full Changelog: https://github.com/brantburnett/Snappier/compare/release/1.0.0...release/1.1.0

Snappier - Initial release

Published by brantburnett over 3 years ago

Note that this release is focused on performance on Intel/AMD x64 processes on .NET Core 3.1 or .NET 5. It uses Intel intrinsics extensively, so performance will be slower on other CPU architectures or runtimes.

Snappier - 1.0.0 Beta 2

Published by brantburnett almost 4 years ago

Various bug fixes found during beta

Snappier - 1.0.0 Beta 1

Published by brantburnett almost 4 years ago