Faster.Map 3.0.3.9

There is a newer version of this package available.
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                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Faster.Map" Version="3.0.3.9" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Faster.Map --version 3.0.3.9                
#r "nuget: Faster.Map, 3.0.3.9"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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

  1. Install nuget package Faster.Map to your project.
dotnet add package Faster.Map

How to use

Faster.Map provides 3 unique hashmaps:

  1. FastMap<Tkey, TValue> is a hashmap which has incredible performance, will only work with numerical keys
  2. DenseMap<Tkey, TValue> is a hashmap which can be used as a replacement to IDicionary.
  3. 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .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