Faster.Map
3.0.2
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
<PackageReference Include="Faster.Map" Version="3.0.2" />
paket add Faster.Map --version 3.0.2
#r "nuget: Faster.Map, 3.0.2"
// 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:
- FastMap<Tkey, TValue> is a hashmap which is highly optimized to be used with numerical keys.
- Map<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 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 | Versions 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. |
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