Extremely fast MurmurHash3 implementation with zero heap allocations
This is a fork of the System.Data.HashFunction.MurmurHash.
- 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 :)
This project is available as a NuGet package
uint hash = MurmurHash3.Hash32(bytes: new byte[]{1,2,3}, seed: 123456U);
Console.WriteLine(hash);
3800434721
ReadOnlySpan<byte> span = ...
uint hash = MurmurHash3.Hash32(bytes: span, seed: 123456U);
// * 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
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 | - | - |
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 | - | - |
- 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)