- Notifications
You must be signed in to change notification settings - Fork1
Extremely fast MurmurHash implementation with zero heap allocations
License
NotificationsYou must be signed in to change notification settings
odinmillion/MurmurHash.Net
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Extremely fast MurmurHash3 implementation with zero heap allocations
This is a fork of theSystem.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 aNuGet package
uinthash=MurmurHash3.Hash32(bytes:newbyte[]{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 CoreSDK=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)