Faster.Map
3.0.3.9
See the version list below for details.
dotnet add package Faster.Map --version 3.0.3.9
NuGet\Install-Package Faster.Map -Version 3.0.3.9
<PackageReference Include="Faster.Map" Version="3.0.3.9" />
paket add Faster.Map --version 3.0.3.9
#r "nuget: Faster.Map, 3.0.3.9"
// Install Faster.Map as a Cake Addin #addin nuget:?package=Faster.Map&version=3.0.3.9 // Install Faster.Map as a Cake Tool #tool nuget:?package=Faster.Map&version=3.0.3.9
Faster.Map - A collection of Robin-hood hashmaps (FastMap, DenseMap, MultiMap)
The goal of Faster is to provide the fastest hashmap that integrates into the .net framework.
Faster.Map uses the following:
- Open addressing
- Linear probing
- Upper limit on the probe sequence lenght(psl) which is Log2(size)
- Fibonacci hashing
About
Faster is a small robinhood hashmap with minimal memory overhead and incredibly fast runtime speed. See benchmarks, or try it out yourself. Faster.Map evolved from the fact that C# dictionaries in targetframework 4.0 are terribly slow. So i decided to create my own robinhood hashmap, turns out that this hashmap even performs better than the current dictionary written in .net5.
Get Started
- Install nuget package Faster.Map to your project.
dotnet add package Faster.Map
How to use
Faster.Map provides 3 unique hashmaps:
- FastMap<Tkey, TValue> is a hashmap which has incredible performance, will only work with numerical keys
- DenseMap<Tkey, TValue> is a hashmap which can be used as a replacement to IDicionary.
- MultiMap<Tkey, Tvalue> is a hashmap that contains of key-value pairs, while permitting multiple entries with the same key. All key-value pairs are stored in a linear fashion and won�t require additional Lists e.g Dictionary<int, List<string>>
Examples
Default Example
private FastMap<uint, uint> _map = new FastMap<uint, uint>(16);
_map.Emplace(1, 50);
_map.Remove(1);
_map.Get(1, out var result);
_map.Update(1, 51);
var result = _map[1];
DenseMap Example
private DenseMap<uint, uint> _map = new DenseMap<uint, uint>(16);
_map.Emplace(1, 50);
_map.Remove(1);
_map.Get(1, out var result);
_map.Update(1, 51);
MultiMap Example
private MultiMap<uint, uint> _multimap = new Map<uint, uint>(16);
_multimap.Emplace(1, 50);
_multimap.Remove(24, 24);
_multimap.RemoveAll(1);
_multimap.Update(1, 50);
_multimap.Get(1, out var result);
_multimap.GetAll(1);
Benchmark
Retrieving a million random generated keys
Method | Mean | Error | StdDev |
---|---|---|---|
SlimDictionary | 28.94 ms | 0.740 ms | 2.136 ms |
Dictionary | 41.60 ms | 1.486 ms | 4.334 ms |
DenseMap | 22.06 ms | 0.573 ms | 1.644 ms |
FastMap | 12.74 ms | 0.239 ms | 0.425 ms |
MultiMap | 23.31 ms | 0.466 ms | 1.344 ms |
Adding a million keys
Method | Mean | Error | StdDev |
---|---|---|---|
DictionarySlim | 21.34 ms | 0.424 ms | 0.904 ms |
Dictionary | 27.84 ms | 0.556 ms | 1.256 ms |
FastMap | 14.88 ms | 0.292 ms | 0.437 ms |
DenseMap | 26.81 ms | 0.689 ms | 2.011 ms |
MultiMap | 35.51 ms | 1.097 ms | 3.234 ms |
Updating a million keys
Method | Mean | Error | StdDev | Median |
---|---|---|---|---|
DictionarySlim | 30.93 ms | 1.168 ms | 3.407 ms | 29.91 ms |
Dictionary | 48.30 ms | 2.132 ms | 6.252 ms | 47.03 ms |
FastMap | 13.62 ms | 0.272 ms | 0.511 ms | 13.60 ms |
DenseMap | 22.63 ms | 0.487 ms | 1.420 ms | 22.63 ms |
MultiMap | 28.85 ms | 0.828 ms | 1.728 ms | 28.85 |
Removing a million keys
Method | Mean | Error | StdDev |
---|---|---|---|
SlimDictionary | 5.867 ms | 0.1152 ms | 0.2076 ms |
Dictionary | 7.636 ms | 0.1703 ms | 0.4994 ms |
FastMap | 21.410 ms | 0.5362 ms | 1.5297 ms |
DenseMap | 37.651 ms | 0.9171 ms | 2.6752 ms |
MultiMap | 47.494 ms | 1.8617 ms | 3.1276 ms |
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. 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 was computed. 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. |
.NET Framework | net472 is compatible. net48 is compatible. net481 was computed. |
-
.NETFramework 4.7.2
- No dependencies.
-
.NETFramework 4.8
- No dependencies.
-
net5.0
- No dependencies.
-
net6.0
- No dependencies.
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.1 | 83 | 10/31/2024 |
6.1.0 | 88 | 10/31/2024 |
6.0.4 | 108 | 10/13/2024 |
6.0.3 | 168 | 9/4/2024 |
6.0.2 | 103 | 9/3/2024 |
6.0.1 | 96 | 9/1/2024 |
6.0.0 | 126 | 8/7/2024 |
5.0.4 | 882 | 4/16/2024 |
5.0.3 | 486 | 11/18/2023 |
5.0.2 | 221 | 10/29/2023 |
5.0.1 | 137 | 10/29/2023 |
5.0.0 | 157 | 10/28/2023 |
4.2.1 | 303 | 9/2/2023 |
4.2.0 | 2,196 | 4/24/2023 |
4.1.6 | 242 | 4/24/2023 |
4.1.5 | 348 | 3/19/2023 |
4.1.4 | 338 | 3/14/2023 |
4.1.3 | 298 | 3/14/2023 |
4.1.2 | 269 | 3/14/2023 |
4.1.1 | 860 | 3/10/2023 |
4.1.0 | 300 | 3/9/2023 |
4.0.9 | 293 | 3/9/2023 |
4.0.8 | 290 | 3/9/2023 |
4.0.7 | 313 | 3/6/2023 |
4.0.6 | 341 | 3/3/2023 |
4.0.5 | 325 | 3/1/2023 |
4.0.4 | 407 | 2/24/2023 |
4.0.3 | 362 | 2/23/2023 |
4.0.2 | 1,146 | 1/7/2023 |
4.0.1 | 400 | 1/6/2023 |
4.0.0 | 381 | 1/4/2023 |
3.0.4.2 | 747 | 12/22/2022 |
3.0.3.9 | 1,091 | 12/9/2022 |
3.0.3.8 | 758 | 11/8/2022 |
3.0.3.7 | 520 | 10/27/2022 |
3.0.3.6 | 536 | 10/18/2022 |
3.0.3.5 | 435 | 10/18/2022 |
3.0.3.4 | 1,108 | 9/20/2022 |
3.0.3.3 | 1,259 | 5/19/2022 |
3.0.3.2 | 481 | 5/17/2022 |
3.0.3.1 | 474 | 5/17/2022 |
3.0.3 | 476 | 5/17/2022 |
3.0.2 | 491 | 5/15/2022 |
minor changes in multimap