Faster.Map
6.1.2
dotnet add package Faster.Map --version 6.1.2
NuGet\Install-Package Faster.Map -Version 6.1.2
<PackageReference Include="Faster.Map" Version="6.1.2" />
paket add Faster.Map --version 6.1.2
#r "nuget: Faster.Map, 6.1.2"
// Install Faster.Map as a Cake Addin #addin nuget:?package=Faster.Map&version=6.1.2 // Install Faster.Map as a Cake Tool #tool nuget:?package=Faster.Map&version=6.1.2
Faster.Map
The goal of Faster.Map is to create a more efficient and performant alternative to the Dictionary and ConcurrentDictionary classes provided by .NET. These standard collections are widely used for key-value pair storage in .NET applications, but they have certain limitations, particularly in high-performance and concurrent scenarios.
Available Implementations:
DenseMap with SIMD Instructions: Harnesses SIMD (Single Instruction, Multiple Data) instructions for parallel processing, resulting in accelerated lookup times. Ideal for scenarios demanding high throughput and optimal CPU utilization.
RobinHoodMap with Linear Probing: Employs linear probing to resolve hash collisions, reducing the likelihood of clustering and improving access speed. Suitable for applications where a balance between performance and simplicity is required.
CMap is a high-performance, thread-safe, lockfree concurrent hashmap that uses open addressing, quadratic probing, and Fibonacci hashing to manage key-value pairs. The default load factor is set to 0.5, meaning the hash map will resize when it is half full. Note: this hashmap will only allocate once while resizing.
Installation:
You can include Faster.Map in your C# project via NuGet Package Manager:
Install-Package Faster.Map
Basic Usage
Default Hasher
By default, DenseMap
uses the DefaultHasher<TKey>
, which computes hashes based on the .NET GetHashCode
method and uses Knuth's Multiplicative Hashing
var map = new DenseMap<int, string>();
map.Emplace(1, "Value One");
map.Emplace(2, "Value Two");
if (map.Get(1, out var value))
{
Console.WriteLine($"Key 1 has value: {value}");
}
map.Remove(1);
Custom Hasher
By default, Faster.Map provides four built-in hashers, each optimized for different performance characteristics:
DefaultHasher GxHasher XxHash3StringHasher XxHash3Hasher
You can provide your own IHasher<TKey>
implementation to customize hash computation.
Step 1: Implement a Custom Hasher
public class CustomIntHasher : IHasher<int>
{
public ulong ComputeHash(int key)
{
return (ulong)(key * 2654435761); // Multiplicative hashing
}
}
Step 2: Use the Custom Hasher in DenseMap
var customHasher = new CustomIntHasher();
var map = new DenseMap<int, string>(customHasher);
map.Emplace(1, "Value One");
map.Emplace(42, "Value Two");
if (map.Get(42, out var value))
{
Console.WriteLine($"Key 42 has value: {value}");
}
map.Update(42, "Updated Value Two");
map.Remove(1);
Advanced Example: Hashing Strings with XxHash
Custom String Hasher
public class XxHash3StringHasher : IHasher<string>
{
public ulong ComputeHash(string key)
{
return XxHash3.HashToUInt64(MemoryMarshal.AsBytes(key.AsSpan()));
}
}
Using the String Hasher
var stringHasher = new XxHash3StringHasher();
var stringMap = new DenseMap<string, int>(stringHasher);
stringMap.Emplace("Hello", 100);
stringMap.Emplace("World", 200);
if (stringMap.Get("Hello", out var value))
{
Console.WriteLine($"Key 'Hello' has value: {value}");
}
stringMap.Remove("World");
Tested on platforms:
- x86
- x64
- arm
- arm64
Benchmark
BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.3880/23H2/2023Update/SunValley3)
12th Gen Intel Core i5-12500H, 1 CPU, 16 logical and 12 physical cores
.NET SDK 9.0.100-preview.2.24157.14
[Host] : .NET 9.0.0 (9.0.24.12805), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.0 (9.0.24.12805), X64 RyuJIT AVX2
Get Benchmark
Method | Length | Mean | Error | StdDev | Median | Allocated | ||
---|---|---|---|---|---|---|---|---|
DenseMap | 1000 | 0.00183 ms | 0.00001 ms | 0.00001 ms | 0.70 | 341 B | - | NA |
RobinhoodMap | 1000 | 0.00137 ms | 0.00000 ms | 0.00000 ms | 0.53 | 175 B | - | NA |
Dictionary | 1000 | 0.00260 ms | 0.00001 ms | 0.00001 ms | 1.00 | 412 B | - | NA |
DenseMap | 10000 | 0.02125 ms | 0.00007 ms | 0.00005 ms | 0.30 | 338 B | - | NA |
RobinhoodMap | 10000 | 0.01335 ms | 0.00005 ms | 0.00004 ms | 0.19 | 175 B | - | NA |
Dictionary | 10000 | 0.07140 ms | 0.00030 ms | 0.00025 ms | 1.00 | 401 B | - | NA |
DenseMap | 100000 | 0.29921 ms | 0.00073 ms | 0.00064 ms | 0.28 | 341 B | - | 0.00 |
RobinhoodMap | 100000 | 0.49631 ms | 0.00137 ms | 0.00128 ms | 0.46 | 175 B | 1 B | 1.00 |
Dictionary | 100000 | 1.06807 ms | 0.00240 ms | 0.00224 ms | 1.00 | 401 B | 1 B | 1.00 |
DenseMap | 400000 | 1.78020 ms | 0.03364 ms | 0.03304 ms | 0.36 | 341 B | 1 B | 0.17 |
RobinhoodMap | 400000 | 2.28105 ms | 0.01908 ms | 0.01593 ms | 0.47 | 175 B | 3 B | 0.50 |
Dictionary | 400000 | 4.88311 ms | 0.04191 ms | 0.03920 ms | 1.00 | 401 B | 6 B | 1.00 |
DenseMap | 900000 | 5.80135 ms | 0.07350 ms | 0.06137 ms | 0.40 | 341 B | 6 B | 0.50 |
RobinhoodMap | 900000 | 8.77417 ms | 0.08236 ms | 0.07704 ms | 0.61 | 175 B | 12 B | 1.00 |
Dictionary | 900000 | 14.45441 ms | 0.06885 ms | 0.05376 ms | 1.00 | 401 B | 12 B | 1.00 |
DenseMap | 1000000 | 10.84462 ms | 0.06526 ms | 0.05785 ms | 0.66 | 341 B | 12 B | 0.52 |
RobinhoodMap | 1000000 | 10.49415 ms | 0.08420 ms | 0.07464 ms | 0.63 | 175 B | 12 B | 0.52 |
Dictionary | 1000000 | 16.54632 ms | 0.11538 ms | 0.09635 ms | 1.00 | 401 B | 23 B | 1.00 |
Adding a million keys
Method | Length | Mean | Error | StdDev | Median | Allocated |
---|---|---|---|---|---|---|
DenseMap | 10000 | 0.06526 ms | 0.00130 ms | 0.00286 ms | 0.06490 ms | 736 B |
RobinhoodMap | 10000 | 0.06092 ms | 0.00212 ms | 0.00602 ms | 0.06100 ms | 736 B |
Dictionary | 10000 | 0.23942 ms | 0.00471 ms | 0.00691 ms | 0.23980 ms | 736 B |
DenseMap | 100000 | 0.46808 ms | 0.00830 ms | 0.01019 ms | 0.46855 ms | 736 B |
RobinhoodMap | 100000 | 0.61636 ms | 0.01201 ms | 0.01430 ms | 0.61195 ms | 448 B |
Dictionary | 100000 | 2.41674 ms | 0.04790 ms | 0.10104 ms | 2.38790 ms | 736 B |
DenseMap | 400000 | 2.09803 ms | 0.04190 ms | 0.08746 ms | 2.08300 ms | 736 B |
RobinhoodMap | 400000 | 3.50303 ms | 0.06982 ms | 0.09079 ms | 3.48000 ms | 736 B |
Dictionary | 400000 | 6.47455 ms | 0.33964 ms | 0.95238 ms | 6.73420 ms | 736 B |
DenseMap | 800000 | 6.37665 ms | 0.28745 ms | 0.79651 ms | 5.82920 ms | 736 B |
RobinhoodMap | 800000 | 8.28828 ms | 0.16465 ms | 0.27052 ms | 8.30780 ms | 736 B |
Dictionary | 800000 | 16.27052 ms | 0.89353 ms | 2.59229 ms | 16.42450 ms | 736 B |
DenseMap | 900000 | 6.79059 ms | 0.13023 ms | 0.13934 ms | 6.74320 ms | 736 B |
RobinhoodMap | 900000 | 9.87488 ms | 0.19034 ms | 0.26054 ms | 9.80475 ms | 736 B |
Dictionary | 900000 | 18.87343 ms | 1.00306 ms | 2.95755 ms | 18.42155 ms | 736 B |
Add and resize
Method | Length | Mean | Error | StdDev | Median | Gen0 | Gen1 | Gen2 | Allocated |
---|---|---|---|---|---|---|---|---|---|
DenseMap | 1000 | 0.08942 ms | 0.00234 ms | 0.00675 ms | 0.08880 ms | - | - | - | 37.75 KB |
RobinhoodMap | 1000 | 0.09152 ms | 0.00414 ms | 0.01181 ms | 0.08890 ms | - | - | - | 37.51 KB |
Dictionary | 1000 | 0.06777 ms | 0.00519 ms | 0.01522 ms | 0.06260 ms | - | - | - | 72.09 KB |
DenseMap | 10000 | 0.22937 ms | 0.00458 ms | 0.01061 ms | 0.22780 ms | - | - | - | 290.31 KB |
RobinhoodMap | 10000 | 0.34865 ms | 0.00692 ms | 0.00769 ms | 0.34860 ms | - | - | - | 578.18 KB |
Dictionary | 10000 | 0.39528 ms | 0.01529 ms | 0.04484 ms | 0.37380 ms | - | - | - | 657.93 KB |
DenseMap | 100000 | 1.29055 ms | 0.01850 ms | 0.01545 ms | 1.29280 ms | - | - | - | 2306.88 KB |
RobinhoodMap | 100000 | 2.34004 ms | 0.03486 ms | 0.05428 ms | 2.32295 ms | - | - | - | 4610.78 KB |
Dictionary | 100000 | 3.32307 ms | 0.06625 ms | 0.11776 ms | 3.29280 ms | - | - | - | 5896.77 KB |
DenseMap | 400000 | 5.04851 ms | 0.09965 ms | 0.25364 ms | 5.05355 ms | - | - | - | 9219.25 KB |
RobinhoodMap | 400000 | 9.31596 ms | 0.18625 ms | 0.30602 ms | 9.23980 ms | - | - | - | 18435.23 KB |
Dictionary | 400000 | 11.52668 ms | 0.40434 ms | 1.12042 ms | 11.20910 ms | - | - | - | 25374.59 KB |
DenseMap | 900000 | 12.38025 ms | 0.22981 ms | 0.62521 ms | 12.22785 ms | - | - | - | 18435.44 KB |
RobinhoodMap | 900000 | 22.62544 ms | 0.69841 ms | 2.01507 ms | 21.66310 ms | - | - | - | 36867.18 KB |
Dictionary | 900000 | 31.53625 ms | 0.85001 ms | 2.43885 ms | 31.31300 ms | 1000.0000 | 1000.0000 | 1000.0000 | 52626.84 KB |
DenseMap | 1000000 | 21.15451 ms | 0.40257 ms | 0.43075 ms | 21.11780 ms | - | - | - | 36867.63 KB |
RobinhoodMap | 1000000 | 26.03638 ms | 0.41907 ms | 0.37149 ms | 26.13220 ms | - | - | - | 36867.46 KB |
Dictionary | 1000000 | 34.51489 ms | 0.68455 ms | 0.89011 ms | 34.59730 ms | 1000.0000 | 1000.0000 | 1000.0000 | 52626.84 KB |
Updating a million keys
Method | Length | Mean | Error | StdDev | Median | Allocated |
---|---|---|---|---|---|---|
RobinhoodMap | 1000 | 0.00122 ms | 0.00001 ms | 0.00001 ms | 0.00122 ms | - |
DenseMap | 1000 | 0.00172 ms | 0.00003 ms | 0.00003 ms | 0.00171 ms | - |
Dictionary | 1000 | 0.00324 ms | 0.00003 ms | 0.00003 ms | 0.00325 ms | - |
DenseMap | 10000 | 0.02178 ms | 0.00013 ms | 0.00012 ms | 0.02181 ms | - |
RobinhoodMap | 10000 | 0.01164 ms | 0.00004 ms | 0.00003 ms | 0.01164 ms | - |
Dictionary | 10000 | 0.08113 ms | 0.00027 ms | 0.00023 ms | 0.08122 ms | - |
DenseMap | 100000 | 0.71209 ms | 0.01294 ms | 0.01211 ms | 0.71421 ms | 1 B |
RobinhoodMap | 100000 | 0.46221 ms | 0.00153 ms | 0.00143 ms | 0.46254 ms | - |
Dictionary | 100000 | 1.16354 ms | 0.00492 ms | 0.00436 ms | 1.16436 ms | 1 B |
DenseMap | 400000 | 3.22005 ms | 0.28612 ms | 0.84362 ms | 2.97777 ms | 6 B |
RobinhoodMap | 400000 | 2.21473 ms | 0.01258 ms | 0.00982 ms | 2.21459 ms | 3 B |
Dictionary | 400000 | 5.35118 ms | 0.03751 ms | 0.03325 ms | 5.34191 ms | 6 B |
DenseMap | 900000 | 9.97496 ms | 0.07694 ms | 0.07197 ms | 9.96754 ms | 12 B |
RobinhoodMap | 900000 | 7.88940 ms | 0.07391 ms | 0.06913 ms | 7.88264 ms | 12 B |
Dictionary | 900000 | 15.75044 ms | 0.10900 ms | 0.09102 ms | 15.72190 ms | 23 B |
DenseMap | 1000000 | 11.15543 ms | 0.11340 ms | 0.10607 ms | 11.14867 ms | 12 B |
RobinhoodMap | 1000000 | 9.78328 ms | 0.11723 ms | 0.10966 ms | 9.73837 ms | 12 B |
Dictionary | 1000000 | 17.87004 ms | 0.11745 ms | 0.10412 ms | 17.90677 ms | 23 B |
Removing a million keys
Method | Length | Mean | Error | StdDev | Median | Allocated |
---|---|---|---|---|---|---|
DenseMap | 100 | 0.00455 ms | 0.00009 ms | 0.00023 ms | 0.00460 ms | 448 B |
RobinhoodMap | 100 | 0.00482 ms | 0.00024 ms | 0.00069 ms | 0.00460 ms | 736 B |
Dictionary | 100 | 0.00510 ms | 0.00029 ms | 0.00086 ms | 0.00470 ms | 448 B |
DenseMap | 10000 | 0.07086 ms | 0.00140 ms | 0.00219 ms | 0.07105 ms | 736 B |
RobinhoodMap | 10000 | 0.07587 ms | 0.00150 ms | 0.00321 ms | 0.07550 ms | 736 B |
Dictionary | 10000 | 0.15835 ms | 0.00860 ms | 0.02494 ms | 0.15090 ms | 736 B |
DenseMap | 100000 | 0.52464 ms | 0.01039 ms | 0.01197 ms | 0.52030 ms | 736 B |
RobinhoodMap | 100000 | 0.80547 ms | 0.01996 ms | 0.05824 ms | 0.81955 ms | 736 B |
Dictionary | 100000 | 1.20308 ms | 0.02320 ms | 0.03016 ms | 1.19430 ms | 736 B |
DenseMap | 400000 | 4.15055 ms | 0.16913 ms | 0.49869 ms | 4.35160 ms | 736 B |
RobinhoodMap | 400000 | 4.75463 ms | 0.12934 ms | 0.37730 ms | 4.77535 ms | 736 B |
Dictionary | 400000 | 5.94284 ms | 0.11669 ms | 0.21918 ms | 5.91770 ms | 736 B |
DenseMap | 900000 | 14.50084 ms | 0.26427 ms | 0.28276 ms | 14.55160 ms | 18875296 B |
RobinhoodMap | 900000 | 12.61194 ms | 0.24400 ms | 0.27121 ms | 12.56030 ms | 736 B |
Dictionary | 900000 | 17.13184 ms | 0.29442 ms | 0.22987 ms | 17.20345 ms | 736 B |
DenseMap | 1000000 | 14.90536 ms | 0.29377 ms | 0.53717 ms | 14.76885 ms | 736 B |
RobinhoodMap | 1000000 | 14.54652 ms | 0.24280 ms | 0.27960 ms | 14.55285 ms | 736 B |
Dictionary | 1000000 | 19.09788 ms | 0.37338 ms | 0.39952 ms | 19.06965 ms | 736 B |
Get String Benchmark
Method | Length | Mean | Error | StdDev | Allocated |
---|---|---|---|---|---|
DenseMap_Default | 10000 | 0.125 ms | 0.001 ms | 0.000 ms | - |
DenseMap_Xxhash3 | 10000 | 0.090 ms | 0.001 ms | 0.001 ms | - |
DenseMap_GxHash | 10000 | 0.088 ms | 0.000 ms | 0.000 ms | - |
RobinhoodMap | 10000 | 0.109 ms | 0.001 ms | 0.001 ms | - |
Dictionary | 10000 | 0.139 ms | 0.000 ms | 0.000 ms | - |
DenseMap_Default | 100000 | 1.571 ms | 0.011 ms | 0.008 ms | 1 B |
DenseMap_Xxhash3 | 100000 | 1.313 ms | 0.002 ms | 0.002 ms | 1 B |
DenseMap_GxHash | 100000 | 1.230 ms | 0.004 ms | 0.003 ms | 1 B |
RobinhoodMap | 100000 | 1.801 ms | 0.007 ms | 0.006 ms | 1 B |
Dictionary | 100000 | 1.830 ms | 0.003 ms | 0.003 ms | 1 B |
DenseMap_Default | 400000 | 8.602 ms | 0.168 ms | 0.173 ms | 12 B |
DenseMap_Xxhash3 | 400000 | 6.453 ms | 0.032 ms | 0.025 ms | 6 B |
DenseMap_GxHash | 400000 | 6.191 ms | 0.043 ms | 0.041 ms | 6 B |
RobinhoodMap | 400000 | 17.033 ms | 0.155 ms | 0.138 ms | 23 B |
Dictionary | 400000 | 8.841 ms | 0.061 ms | 0.051 ms | 12 B |
DenseMap_Default | 800000 | 29.155 ms | 0.132 ms | 0.117 ms | 23 B |
DenseMap_Xxhash3 | 800000 | 21.616 ms | 0.241 ms | 0.214 ms | 23 B |
DenseMap_GxHash | 800000 | 17.977 ms | 0.086 ms | 0.081 ms | 23 B |
RobinhoodMap | 800000 | 42.700 ms | 0.187 ms | 0.156 ms | 61 B |
Dictionary | 800000 | 25.280 ms | 0.086 ms | 0.081 ms | 23 B |
DenseMap_Default | 900000 | 34.148 ms | 0.348 ms | 0.325 ms | 49 B |
DenseMap_Xxhash3 | 900000 | 25.203 ms | 0.087 ms | 0.073 ms | 23 B |
DenseMap_GxHash | 900000 | 21.758 ms | 0.105 ms | 0.087 ms | 23 B |
RobinhoodMap | 900000 | 51.350 ms | 0.184 ms | 0.172 ms | 74 B |
Dictionary | 900000 | 29.715 ms | 0.076 ms | 0.063 ms | 23 B |
DenseMap_Default | 1000000 | 42.762 ms | 0.282 ms | 0.264 ms | 61 B |
DenseMap_Xxhash3 | 1000000 | 30.722 ms | 0.087 ms | 0.081 ms | 23 B |
DenseMap_GxHash | 1000000 | 25.237 ms | 0.070 ms | 0.066 ms | 23 B |
RobinhoodMap | 1000000 | 61.434 ms | 0.364 ms | 0.322 ms | 92 B |
Dictionary | 1000000 | 34.179 ms | 0.650 ms | 0.798 ms | 49 B |
Add string benchmark
Method | Length | Mean | Error | StdDev | Allocated |
---|---|---|---|---|---|
DenseMap | 10000 | 0.06328 ms | 0.00119 ms | 0.00117 ms | - |
RobinhoodMap | 10000 | 0.11138 ms | 0.00089 ms | 0.00083 ms | - |
Dictionary | 10000 | 0.14030 ms | 0.00101 ms | 0.00084 ms | - |
DenseMap | 100000 | 0.89303 ms | 0.00092 ms | 0.00081 ms | 1 B |
RobinhoodMap | 100000 | 1.74953 ms | 0.00542 ms | 0.00507 ms | 1 B |
Dictionary | 100000 | 1.82837 ms | 0.00251 ms | 0.00222 ms | 1 B |
DenseMap | 400000 | 5.69521 ms | 0.08819 ms | 0.07364 ms | 6 B |
RobinhoodMap | 400000 | 17.48812 ms | 0.11409 ms | 0.10672 ms | 23 B |
Dictionary | 400000 | 8.90541 ms | 0.10513 ms | 0.09319 ms | 12 B |
DenseMap | 900000 | 25.03465 ms | 0.15671 ms | 0.12235 ms | 23 B |
RobinhoodMap | 900000 | 52.43294 ms | 0.71473 ms | 0.63359 ms | 74 B |
Dictionary | 900000 | 29.69477 ms | 0.19468 ms | 0.15200 ms | 23 B |
DenseMap | 1000000 | 33.72319 ms | 0.28449 ms | 0.25219 ms | 49 B |
RobinhoodMap | 1000000 | 62.24546 ms | 0.39693 ms | 0.37129 ms | 92 B |
Dictionary | 1000000 | 34.00727 ms | 0.10688 ms | 0.08925 ms | 49 B |
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. |
-
net7.0
- System.IO.Hashing (>= 9.0.0-rc.2.24473.5)
-
net8.0
- GxHash (>= 2.0.0)
- System.IO.Hashing (>= 9.0.0-rc.2.24473.5)
-
net9.0
- GxHash (>= 2.0.0)
- System.IO.Hashing (>= 9.0.0-rc.2.24473.5)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Faster.Map:
Package | Downloads |
---|---|
Faster.Ioc
Package Description |
|
UPSRestApi
UpsRestApi library for .Net used to access UPS API Catalog to browse products and view documentation. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
6.1.2 | 42 | 11/16/2024 |
6.1.1 | 93 | 10/31/2024 |
6.1.0 | 92 | 10/31/2024 |
6.0.4 | 116 | 10/13/2024 |
6.0.3 | 172 | 9/4/2024 |
6.0.2 | 107 | 9/3/2024 |
6.0.1 | 100 | 9/1/2024 |
6.0.0 | 130 | 8/7/2024 |
5.0.4 | 956 | 4/16/2024 |
5.0.3 | 489 | 11/18/2023 |
5.0.2 | 225 | 10/29/2023 |
5.0.1 | 141 | 10/29/2023 |
5.0.0 | 160 | 10/28/2023 |
4.2.1 | 308 | 9/2/2023 |
4.2.0 | 2,203 | 4/24/2023 |
4.1.6 | 245 | 4/24/2023 |
4.1.5 | 351 | 3/19/2023 |
4.1.4 | 341 | 3/14/2023 |
4.1.3 | 301 | 3/14/2023 |
4.1.2 | 272 | 3/14/2023 |
4.1.1 | 863 | 3/10/2023 |
4.1.0 | 303 | 3/9/2023 |
4.0.9 | 296 | 3/9/2023 |
4.0.8 | 293 | 3/9/2023 |
4.0.7 | 316 | 3/6/2023 |
4.0.6 | 344 | 3/3/2023 |
4.0.5 | 328 | 3/1/2023 |
4.0.4 | 410 | 2/24/2023 |
4.0.3 | 365 | 2/23/2023 |
4.0.2 | 1,149 | 1/7/2023 |
4.0.1 | 403 | 1/6/2023 |
4.0.0 | 384 | 1/4/2023 |
3.0.4.2 | 750 | 12/22/2022 |
3.0.3.9 | 1,097 | 12/9/2022 |
3.0.3.8 | 762 | 11/8/2022 |
3.0.3.7 | 523 | 10/27/2022 |
3.0.3.6 | 539 | 10/18/2022 |
3.0.3.5 | 438 | 10/18/2022 |
3.0.3.4 | 1,111 | 9/20/2022 |
3.0.3.3 | 1,262 | 5/19/2022 |
3.0.3.2 | 484 | 5/17/2022 |
3.0.3.1 | 477 | 5/17/2022 |
3.0.3 | 479 | 5/17/2022 |
3.0.2 | 494 | 5/15/2022 |
New Features:
Add custom hasher:
- GxHash
- XX3Hash
- XX3HashString