Faster.Map 3.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Faster.Map --version 3.0.2                
NuGet\Install-Package Faster.Map -Version 3.0.2                
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.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Faster.Map --version 3.0.2                
#r "nuget: Faster.Map, 3.0.2"                
#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.2

// Install Faster.Map as a Cake Tool
#tool nuget:?package=Faster.Map&version=3.0.2                

Faster.Map - fastest c# hashmap

The goal of Faster is to provide the fastest dict/set that integrates into the .net scientific ecosystem.

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.

How to use

Faster.Map provides 3 unique hashmaps:

  1. FastMap<Tkey, TValue> is a hashmap which is highly optimized to be used with numerical keys.
  2. Map<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 wont 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];    

Map Example

private Map<uint, uint> _map = new Map<uint, uint>(16);
 _map.Emplace(1, 50); 
 _map.Remove(1);
 _map.Get(1, out var result);
 _map.Update(1, 51);
    

MultiMap Example

private MultiMap<uin,t 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

Method N Mean Error StdDev BranchInstructionRetired/Op CacheMisses/Op LLCMisses/Op
FastMap 1000000 1.451 ms 0.0155s 0.0145ms 3015435 175 232
Map 1000000 3.451 ms 0.0102s 0.0095ms 8040841 610 3358
Dictionary 1000000 6.902 ms 0.1305 ms 0.1451 ms 11,075,4822 1050 922
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  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 Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has 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.2 48 11/16/2024
6.1.1 97 10/31/2024
6.1.0 94 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 958 4/16/2024
5.0.3 491 11/18/2023
5.0.2 225 10/29/2023
5.0.1 141 10/29/2023
5.0.0 162 10/28/2023
4.2.1 308 9/2/2023
4.2.0 2,209 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 305 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

add multimap to Faster