MurmurHash.Net
MurmurHash.Net copied to clipboard
Extremely fast MurmurHash implementation with zero heap allocations
MurmurHash.Net
Extremely fast MurmurHash3 implementation with zero heap allocations
This is a fork of the System.Data.HashFunction.MurmurHash.
Differences
- Faster (zero heap allocations via Spans, reduced class inheritance, bytes to uint conversion optimisations)
- Only 32-bit output hash value. Maybe 128-bit will be supported in the future. But you can implement it by yourself and send me PR :)
Installation
This project is available as a NuGet package
Example
Some code 1. You can use traditional byte[]
uint hash = MurmurHash3.Hash32(bytes: new byte[]{1,2,3}, seed: 123456U);
Console.WriteLine(hash);
Output 1
3800434721
Some code 2. State-of-the-art Span<byte> and ReadOnlySpan<byte> also supported
ReadOnlySpan<byte> span = ...
uint hash = MurmurHash3.Hash32(bytes: span, seed: 123456U);
Benchmarks
// * Summary *
BenchmarkDotNet=v0.12.0, OS=macOS Mojave 10.14.6 (18G103) [Darwin 18.7.0]
Intel Core i7-7660U CPU 2.50GHz (Kaby Lake), 1 CPU, 4 logical and 2 physical cores
.NET Core SDK=3.1.100
[Host] : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT
DefaultJob : .NET Core 3.1.0 (CoreCLR 4.700.19.56402, CoreFX 4.700.19.56404), X64 RyuJIT
Byte[] to uint
| Method | Mean | StdDev | Ratio | RatioSD | Gen 0 | Allocated |
|---|---|---|---|---|---|---|
| CRC32 | 40.73 us | 0.696 us | 3.32 | 0.06 | - | - |
| XxHash | 197.13 us | 10.995 us | 15.65 | 0.62 | 87.8906 | 184000 B |
| MurMurHashByDarrenkopp | 51.46 us | 3.469 us | 4.04 | 0.16 | 15.3198 | 32000 B |
| Blake2B | 91.83 us | 3.949 us | 7.57 | 0.41 | 7.5684 | 16000 B |
| MurMurHashNet | 12.28 us | 0.122 us | 1.00 | 0.00 | - | - |
String to uint
| Method | Mean | StdDev | Ratio | RatioSD | Gen 0 | Allocated |
|---|---|---|---|---|---|---|
| CRC32 | 65.63 us | 1.385 us | 3.00 | 0.08 | 15.2588 | 32000 B |
| XxHash | 228.36 us | 21.086 us | 9.52 | 0.28 | 103.2715 | 216000 B |
| MurMurHashByDarrenkopp | 77.14 us | 2.490 us | 3.53 | 0.15 | 30.6396 | 64000 B |
| Blake2B | 119.69 us | 2.443 us | 5.46 | 0.18 | 22.9492 | 48000 B |
| MurMurHashNet | 21.91 us | 0.364 us | 1.00 | 0.00 | - | - |
Legend
- CRC32 - https://www.nuget.org/packages/Crc32/1.1.0
- XxHash - https://www.nuget.org/packages/System.Data.HashFunction.xxHash/2.0.0
- MurMurHashByDarrenkopp - https://www.nuget.org/packages/murmurhash/1.0.3
- Blake2B - https://www.nuget.org/packages/SauceControl.Blake2Fast/1.0.0
- MurMurHashNet - https://www.nuget.org/packages/MurmurHash.Net/0.0.1 (this repo)