Skip to content

A .NET implementation of several non-cryptographic hashes.

License

Notifications You must be signed in to change notification settings

TommasoBelluzzo/FastHashes

Repository files navigation

FastHashes

FashHashes is a suite of .NET non-cryptographic hash functions.

Status: Build Coverage
Info: License Lines Size
NuGet: Version Downloads
Donation: PayPal

Main Features

  • High Performing: deeply-optimized code makes extensive use of method inlining and unsafe memory pointers in order to speed up the computations.
  • Allocation Free: all the internal functions follow a zero-allocation approach, only primitive types and/or arrays of primitive types are used by the algorithms.
  • Endian-Agnostic: all the hashes provide consistent results regardless of the machine byte order, while only moderately affecting the overall performance of the computations.
  • Platform-Agnostic: the code has been developed under .NET Standard framework and both x86 and x64 environments are fully supported.
  • Fully Managed: since version 3.0.0, pointers requiring unsafe memory access contexts have been completely removed and the library is now fully managed.

Hashes

The library includes the following non-cryptographic hashes:

Requirements

The following Frameworks are supported:

  • Library: .NET Standard 2.0, .NET Standard 2.1
  • Auxiliary Projects: .NET Core 2.1, .NET Core 3.1, .NET 5.0, .NET 6.0

The following NuGet packages are required for performing unit tests:

Performance Benchmarks

Hash Rank Hash Name Bulk Speed Test Average ↓ Chunks Speed Test Average
- DummyHash (Reference) 609.34 GB/s 2.06 GB/s
1 FarmHash64 11.47 GB/s 626.60 MB/s
2 FarmHash128 11.27 GB/s 641.03 MB/s
3 MetroHash128-V1 11.11 GB/s 636.52 MB/s
4 MetroHash64-V1 11.10 GB/s 628.81 MB/s
5 MetroHash128-V2 11.06 GB/s 635.34 MB/s
6 MetroHash64-V2 11.05 GB/s 620.92 MB/s
7 XxHash64 10.03 GB/s 596.90 MB/s
8 Mx3Hash 9.31 GB/s 545.03 MB/s
9 PengyHash 8.73 GB/s 517.22 MB/s
10 MurmurHash128-x64 6.70 GB/s 485.59 MB/s
11 MurmurHash64-x64 6.56 GB/s 467.14 MB/s
12 XxHash32 6.43 GB/s 482.92 MB/s
13 FastHash64 5.34 GB/s 444.45 MB/s
14 FastHash32 5.26 GB/s 440.91 MB/s
15 WyHash32 4.38 GB/s 389.76 MB/s
16 FarmHash32 4.27 GB/s 394.83 MB/s
17 FastPositiveHash-V1 4.10 GB/s 386.51 MB/s
18 MurmurHash128-x86 4.05 GB/s 383.60 MB/s
19 MurmurHash64-x86 4.01 GB/s 374.73 MB/s
20 FastPositiveHash-V2 3.99 GB/s 386.33 MB/s
21 MurmurHash32 2.82 GB/s 332.35 MB/s
22 MumHash 2.44 GB/s 312.24 MB/s
23 WyHash64 2.39 GB/s 340.13 MB/s
24 KomiHash 2.31 GB/s 331.88 MB/s
25 FastPositiveHash-V0 2.29 GB/s 320.69 MB/s
26 MirHash 2.03 GB/s 298.14 MB/s
27 SipHash-13 1.28 GB/s 230.67 MB/s
28 HighwayHash256 914.16 MB/s 125.78 MB/s
29 HighwayHash64 899.65 MB/s 151.54 MB/s
30 HighwayHash128 883.51 MB/s 143.84 MB/s
31 SpookyHash32 752.43 MB/s 156.79 MB/s
32 SpookyHash64 734.84 MB/s 149.36 MB/s
33 SipHash-24 734.74 MB/s 168.43 MB/s
34 SpookyHash128 723.91 MB/s 155.67 MB/s
35 HalfSipHash 364.78 MB/s 119.96 MB/s

The tests above have been conducted with the following machine setup:

  • CPU: Intel Core i7-7700HQ @2.80GHz (4 Cores, 8 Threads, 256KB L1 Cache)
  • RAM: 16 GB x DDR4 SO-DIMM @1200MHz
  • OS: Microsoft Windows 10 64-Bit