Skip to content

docs(LruCache): note that a hit on the already-MRU entry keeps enumerators valid - #330

Merged
marius-bughiu merged 2 commits into
mainfrom
chore/code-review/lru-mru-hit-enumerator-docs
Jul 30, 2026
Merged

docs(LruCache): note that a hit on the already-MRU entry keeps enumerators valid#330
marius-bughiu merged 2 commits into
mainfrom
chore/code-review/lru-mru-hit-enumerator-docs

Conversation

@marius-bughiu

Copy link
Copy Markdown
Owner

What

LruCache documents in four places that a mutating read (the indexer getter or TryGet) invalidates any in-progress enumerator. It does so unconditionally, but the implementation is deliberately narrower: MoveToHeadIfNeeded returns false without relinking or bumping _version when the entry is already the head, so a hit on the most-recently-used entry leaves active enumerators valid. This PR adds that exception to the class remarks, the TryGet remarks, the GetEnumerator summary, and the LruCache section of docs/api/collections.md. No code changes.

Why

The behaviour is intentional — the internal comment on MoveToHeadIfNeeded spells it out ("so a getter of the freshest entry does not spuriously invalidate enumerators") and LruCacheEnumerationTests.GetOfAlreadyMostRecentEntry_DoesNotInvalidateEnumerator pins it — but a consumer reading the public docs would expect the opposite. The repo already documents this class of exemption elsewhere (FenwickTree's "except when they are no-ops", BTreeDictionary's "a rejected duplicate TryAdd is a true no-op"), so this brings LruCache in line rather than introducing a new convention.

Test plan

  • dotnet build — succeeds, 0 warnings for Celerity.csproj
  • No dotnet test run: the change is XML doc comments and Markdown only, with no effect on emitted IL
  • Existing LruCacheEnumerationTests.GetOfAlreadyMostRecentEntry_DoesNotInvalidateEnumerator already covers the behaviour now being documented

…ators valid

The class remarks, the TryGet remarks, the GetEnumerator summary, and the API
reference all stated unconditionally that a mutating read invalidates active
enumerators. MoveToHeadIfNeeded deliberately skips the relink and the version
bump when the entry is already the head, which LruCacheEnumerationTests pins as
GetOfAlreadyMostRecentEntry_DoesNotInvalidateEnumerator.

Documentation only; no behavioural change.
@marius-bughiu marius-bughiu added the automated:code-review PR or issue opened by celerity---code-review sweep label Jul 30, 2026
Copilot AI review requested due to automatic review settings July 30, 2026 00:16
@github-actions

Copy link
Copy Markdown

Coverage

Metric Value
Line 100% (10134/10134)
Branch 100% (3986/3986)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Not ready to approve

The updated enumerator documentation still uses “modified during enumeration” wording that is broader than the actual _version-based invalidation behavior.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Pull request overview

This PR updates the public documentation for LruCache to reflect an intentional implementation detail: a mutating read (this[key] getter / TryGet) only invalidates active enumerators when it actually changes the recency list; a hit on the already-most-recently-used entry is a no-op and keeps enumerators valid.

Changes:

  • Updated LruCache class remarks and TryGet remarks to document the MRU hit no-op enumerator-validity exception.
  • Updated GetEnumerator XML documentation to describe the exception in the enumerator invalidation semantics.
  • Updated the LruCache section in docs/api/collections.md with the same clarification.
File summaries
File Description
src/Celerity/Collections/LruCache.cs Refines XML docs to note the MRU-hit no-op case for enumerator validity.
docs/api/collections.md Mirrors the MRU-hit no-op enumerator-validity exception in the public markdown docs.
Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 1
  • Review effort level: Low

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

Comment thread src/Celerity/Collections/LruCache.cs Outdated
"Modified during enumeration" was broader than the code: AddOrUpdate on an
entry that is already the head overwrites _nodeValues without bumping _version,
so an in-place value overwrite leaves enumerators valid. Name the real
condition — a change to the entry set or the recency order — instead.
Copilot AI review requested due to automatic review settings July 30, 2026 00:22

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Ready to approve

The documentation updates align with the implementation’s _version semantics and existing library conventions, with no code changes introduced.

This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.

Review details
  • Files reviewed: 2/2 changed files
  • Comments generated: 0 new
  • Review effort level: Low

We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.

@github-actions

Copy link
Copy Markdown

Benchmarks

8 regressions ⚠️ vs main, 3 improvements ✅ (rows past ±10% beyond noise).

Highlights

Benchmark This PR StdDev main Δ
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 100000) 208.87 ms 12.31 ms 159.00 ms +31.4% ⚠️
SmallSetBenchmark.SmallSet_Remove(ItemCount: 64) 27.71 μs 391.1 ns 21.06 μs +31.6% ⚠️
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 2.22 ms 233.69 μs 2.69 ms -17.4% ✅
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.05 ms 123.50 μs 2.65 ms -22.4% ✅
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.23 ms 199.80 μs 2.01 ms +11.3% ⚠️
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 17.01 μs 383.7 ns 15.35 μs +10.8% ⚠️
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 44.50 ms 1.75 ms 50.16 ms -11.3% ✅
LongSetBenchmark.LongSet_Add(ItemCount: 1000) 10.24 μs 539.2 ns 9.28 μs +10.4% ⚠️
StringKeyProbeBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 8.11 ms 741.20 μs 6.82 ms +18.9% ⚠️
StringKeyProbeBenchmark.CelerityDictionary_LookupMissing(ItemCount: 100000) 9.18 ms 860.07 μs 7.37 ms +24.5% ⚠️
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 1000) 31.70 μs 3.84 μs 24.93 μs +27.2% ⚠️
Collections (508)
Benchmark This PR StdDev main Δ
BloomFilterBenchmark.HashSet_Add(ItemCount: 1000) 13.27 μs 294.1 ns 12.25 μs +8.3%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 1000) 14.34 μs 139.1 ns 14.47 μs -1.0%
BloomFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.67 ms 128.25 μs 4.61 ms +1.1%
BloomFilterBenchmark.BloomFilter_Add(ItemCount: 100000) 1.10 ms 1.15 μs 1.10 ms +0.3%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 1000) 165.67 μs 1.03 μs 165.40 μs +0.2%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 1000) 2.64 ms 49.61 μs 2.54 ms +4.0%
FrozenCeleritySetBenchmark.FrozenSet_Build(ItemCount: 100000) 29.32 ms 745.04 μs 29.72 ms -1.3%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Build(ItemCount: 100000) 1.49 s 59.10 ms 1.42 s +4.7%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.86 μs 131.9 ns 4.87 μs -0.2%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 1000) 6.87 μs 11.5 ns 6.88 μs -0.0%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 1000) 12.52 μs 11.9 ns 12.51 μs +0.0%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 1000) 93.12 μs 3.58 μs 89.14 μs +4.5%
BloomFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.57 ms 2.13 μs 1.58 ms -0.5%
FrozenCeleritySetBenchmark.FrozenSet_Contains(ItemCount: 100000) 1.92 ms 80.43 μs 1.97 ms -2.7%
BloomFilterBenchmark.BloomFilter_Contains(ItemCount: 100000) 868.79 μs 773.3 ns 868.40 μs +0.0%
FrozenCeleritySetBenchmark.FrozenCeleritySet_Contains(ItemCount: 100000) 7.34 ms 38.85 μs 7.38 ms -0.5%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.54 μs 6.3 ns 4.54 μs +0.0%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 1000) 3.53 μs 11.1 ns 3.53 μs -0.1%
BloomFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.94 ms 4.46 μs 1.95 ms -0.3%
BloomFilterBenchmark.BloomFilter_ContainsMissing(ItemCount: 100000) 1.49 ms 753.1 ns 1.49 ms +0.0%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 1000) 10.34 μs 83.6 ns 10.29 μs +0.5%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 1000) 5.54 μs 180.2 ns 5.20 μs +6.4%
CelerityMultiSetBenchmark.Dictionary_Count(ItemCount: 100000) 1.47 ms 14.03 μs 1.45 ms +1.1%
CelerityMultiSetBenchmark.CelerityMultiSet_Count(ItemCount: 100000) 731.94 μs 7.84 μs 731.28 μs +0.1%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.72 μs 377.6 ns 13.69 μs +0.2%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 1000) 30.12 μs 219.7 ns 29.59 μs +1.8%
SwissDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.80 ms 159.17 μs 4.54 ms +5.8%
SwissDictionaryBenchmark.SwissDictionary_Insert(ItemCount: 100000) 3.97 ms 41.62 μs 3.95 ms +0.6%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.40 μs 16.0 ns 4.54 μs -3.1%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.70 μs 32.5 ns 4.71 μs -0.3%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 1000) 1.73 μs 7.7 ns 1.72 μs +0.4%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 1000) 3.01 μs 21.4 ns 3.06 μs -1.5%
CelerityMultiSetBenchmark.Dictionary_Lookup(ItemCount: 100000) 649.34 μs 16.50 μs 630.42 μs +3.0%
SwissDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.61 ms 6.96 μs 1.55 ms +4.3%
CelerityMultiSetBenchmark.CelerityMultiSet_Lookup(ItemCount: 100000) 207.93 μs 17.02 μs 192.18 μs +8.2%
SwissDictionaryBenchmark.SwissDictionary_Lookup(ItemCount: 100000) 832.47 μs 22.87 μs 800.54 μs +4.0%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 1000) 182.37 μs 560.1 ns 182.70 μs -0.2%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 1000) 11.30 μs 84.3 ns 11.27 μs +0.2%
FenwickTreeBenchmark.Array_Mixed(ItemCount: 100000) 167.04 ms 992.23 μs 167.54 ms -0.3%
FenwickTreeBenchmark.FenwickTree_Mixed(ItemCount: 100000) 640.52 μs 13.35 μs 632.90 μs +1.2%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 1000) 220.94 μs 312.5 ns 220.83 μs +0.0%
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 1000) 7.46 μs 18.1 ns 7.45 μs +0.1%
FenwickTreeBenchmark.Array_RangeSum(ItemCount: 100000) 208.87 ms 12.31 ms 159.00 ms +31.4% ⚠️
FenwickTreeBenchmark.FenwickTree_RangeSum(ItemCount: 100000) 327.80 μs 1.42 μs 344.00 μs -4.7%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 1000) 51.22 μs 6.77 μs 51.44 μs -0.4%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 85.52 μs 7.74 μs 80.05 μs +6.8%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 1000) 83.46 μs 8.36 μs 86.80 μs -3.9%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 1000) 89.41 μs 10.97 μs 82.75 μs +8.0%
CelerityMultiSetBenchmark.Dictionary_Remove(ItemCount: 100000) 537.66 μs 16.52 μs 537.04 μs +0.1%
SwissDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.06 ms 18.31 μs 2.27 ms -9.4%
CelerityMultiSetBenchmark.CelerityMultiSet_Remove(ItemCount: 100000) 1.28 ms 16.74 μs 1.29 ms -0.9%
SwissDictionaryBenchmark.SwissDictionary_Remove(ItemCount: 100000) 1.70 ms 107.21 μs 1.64 ms +3.5%
EnumMapBenchmark.Dictionary_Add 626.7 ns 7.9 ns 630.5 ns -0.6%
EnumSetBenchmark.HashSet_Add 583.6 ns 5.1 ns 589.5 ns -1.0%
EnumMapBenchmark.EnumMap_Add 111.7 ns 1.6 ns 110.8 ns +0.8%
EnumSetBenchmark.EnumSet_Add 84.1 ns 1.6 ns 82.2 ns +2.4%
SmallSetBenchmark.HashSet_Add(ItemCount: 8) 184.4 ns 4.0 ns 179.7 ns +2.6%
SmallSetBenchmark.SmallSet_Add(ItemCount: 8) 58.8 ns 0.5 ns 57.6 ns +2.0%
SmallSetBenchmark.HashSet_Add(ItemCount: 64) 779.4 ns 5.8 ns 799.7 ns -2.5%
SmallSetBenchmark.SmallSet_Add(ItemCount: 64) 1.60 μs 13.3 ns 1.61 μs -0.7%
TrieBenchmark.Dictionary_Add(ItemCount: 1000) 33.06 μs 1.73 μs 33.35 μs -0.9%
TrieBenchmark.Trie_Add(ItemCount: 1000) 525.77 μs 15.58 μs 430.88 μs +22.0%
TrieBenchmark.Dictionary_Add(ItemCount: 100000) 5.31 ms 1.47 ms 5.23 ms +1.5%
TrieBenchmark.Trie_Add(ItemCount: 100000) 28.51 ms 492.93 μs 28.84 ms -1.1%
RankSelectBitVectorBenchmark.Array_Build(ItemCount: 1024) 85.0 ns 2.1 ns 83.2 ns +2.2%
RankSelectBitVectorBenchmark.RankSelectBitVector_Build(ItemCount: 1024) 59.1 ns 1.0 ns 59.3 ns -0.4%
RankSelectBitVectorBenchmark.Array_Build(ItemCount: 1000000) 77.24 μs 363.0 ns 77.17 μs +0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_Build(ItemCount: 1000000) 97.20 μs 409.3 ns 97.63 μs -0.4%
EnumSetBenchmark.HashSet_Contains 170.3 ns 0.1 ns 171.2 ns -0.5%
EnumSetBenchmark.EnumSet_Contains 51.5 ns 0.0 ns 51.6 ns -0.1%
SmallSetBenchmark.HashSet_Contains(ItemCount: 8) 37.3 ns 0.0 ns 37.3 ns +0.1%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 8) 19.9 ns 0.3 ns 19.8 ns +0.8%
SmallSetBenchmark.HashSet_Contains(ItemCount: 64) 301.8 ns 0.3 ns 303.6 ns -0.6%
SmallSetBenchmark.SmallSet_Contains(ItemCount: 64) 920.3 ns 7.7 ns 925.0 ns -0.5%
EnumMapBenchmark.Dictionary_Enumerate 43.1 ns 0.1 ns 43.2 ns -0.0%
EnumMapBenchmark.EnumMap_Enumerate 38.0 ns 0.2 ns 38.1 ns -0.2%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 1000) 27.61 μs 537.8 ns 27.26 μs +1.3%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 1000) 41.25 μs 356.8 ns 40.26 μs +2.5%
CelerityMultiMapBenchmark.Dictionary_Insert(ItemCount: 100000) 14.05 ms 666.90 μs 14.07 ms -0.1%
CelerityMultiMapBenchmark.CelerityMultiMap_Insert(ItemCount: 100000) 18.15 ms 104.52 μs 18.65 ms -2.7%
EnumMapBenchmark.Dictionary_Lookup 136.5 ns 0.9 ns 135.7 ns +0.6%
EnumMapBenchmark.EnumMap_Lookup 69.7 ns 0.1 ns 70.0 ns -0.4%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 1000) 5.09 μs 4.9 ns 5.03 μs +1.3%
TrieBenchmark.Dictionary_Lookup(ItemCount: 1000) 12.57 μs 20.8 ns 12.57 μs +0.0%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 1000) 2.55 μs 1.9 ns 2.55 μs -0.1%
TrieBenchmark.Trie_Lookup(ItemCount: 1000) 45.27 μs 96.2 ns 45.22 μs +0.1%
CelerityMultiMapBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.83 ms 44.44 μs 1.78 ms +2.7%
TrieBenchmark.Dictionary_Lookup(ItemCount: 100000) 2.78 ms 4.96 μs 2.78 ms -0.2%
CelerityMultiMapBenchmark.CelerityMultiMap_Lookup(ItemCount: 100000) 776.67 μs 3.85 μs 781.92 μs -0.7%
TrieBenchmark.Trie_Lookup(ItemCount: 100000) 9.76 ms 268.63 μs 9.93 ms -1.7%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 1000) 80.07 μs 128.6 ns 80.03 μs +0.1%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 1000) 56.42 μs 507.5 ns 57.68 μs -2.2%
TrieBenchmark.Dictionary_PrefixMatch(ItemCount: 100000) 8.08 ms 24.94 μs 8.06 ms +0.2%
TrieBenchmark.Trie_PrefixMatch(ItemCount: 100000) 7.85 ms 905.79 μs 7.27 ms +8.1%
RankSelectBitVectorBenchmark.Array_RankEarly(ItemCount: 1024) 1.33 μs 0.9 ns 1.33 μs +0.0%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankEarly(ItemCount: 1024) 2.02 μs 2.9 ns 2.03 μs -0.0%
RankSelectBitVectorBenchmark.Array_RankEarly(ItemCount: 1000000) 30.60 μs 68.0 ns 30.68 μs -0.3%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankEarly(ItemCount: 1000000) 2.02 μs 2.4 ns 2.03 μs -0.1%
RankSelectBitVectorBenchmark.Array_RankLate(ItemCount: 1024) 8.15 μs 8.8 ns 8.16 μs -0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankLate(ItemCount: 1024) 2.02 μs 2.3 ns 2.02 μs +0.0%
RankSelectBitVectorBenchmark.Array_RankLate(ItemCount: 1000000) 5.52 ms 10.42 μs 5.52 ms -0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankLate(ItemCount: 1000000) 2.16 μs 2.1 ns 2.02 μs +6.8%
RankSelectBitVectorBenchmark.Array_RankMid(ItemCount: 1024) 4.61 μs 6.6 ns 4.61 μs -0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankMid(ItemCount: 1024) 2.03 μs 3.6 ns 2.02 μs +0.1%
RankSelectBitVectorBenchmark.Array_RankMid(ItemCount: 1000000) 2.81 ms 2.86 μs 2.81 ms -0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_RankMid(ItemCount: 1000000) 2.02 μs 2.3 ns 2.02 μs -0.0%
EnumMapBenchmark.Dictionary_Remove 3.06 μs 434.9 ns 2.61 μs +17.2%
EnumSetBenchmark.HashSet_Remove 2.63 μs 424.2 ns 2.46 μs +6.6%
EnumMapBenchmark.EnumMap_Remove 1.30 μs 277.9 ns 1.41 μs -8.1%
EnumSetBenchmark.EnumSet_Remove 1.10 μs 223.5 ns 957.8 ns +14.8%
SmallSetBenchmark.HashSet_Remove(ItemCount: 8) 430.0 ns 71.2 ns 407.9 ns +5.4%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 8) 1.24 μs 123.0 ns 1.03 μs +20.4%
SmallSetBenchmark.HashSet_Remove(ItemCount: 64) 1.48 μs 253.1 ns 1.45 μs +1.6%
SmallSetBenchmark.SmallSet_Remove(ItemCount: 64) 27.71 μs 391.1 ns 21.06 μs +31.6% ⚠️
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 1000) 26.39 μs 1.71 μs 28.94 μs -8.8%
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 1000) 129.20 μs 8.68 μs 119.76 μs +7.9%
CelerityMultiMapBenchmark.Dictionary_Remove(ItemCount: 100000) 2.22 ms 233.69 μs 2.69 ms -17.4% ✅
CelerityMultiMapBenchmark.CelerityMultiMap_Remove(ItemCount: 100000) 2.05 ms 123.50 μs 2.65 ms -22.4% ✅
RankSelectBitVectorBenchmark.Array_Select(ItemCount: 1024) 14.08 μs 38.2 ns 14.06 μs +0.1%
RankSelectBitVectorBenchmark.RankSelectBitVector_Select(ItemCount: 1024) 10.43 μs 27.1 ns 10.43 μs +0.0%
RankSelectBitVectorBenchmark.Array_Select(ItemCount: 1000000) 4.80 ms 45.66 μs 4.78 ms +0.4%
RankSelectBitVectorBenchmark.RankSelectBitVector_Select(ItemCount: 1000000) 26.01 μs 120.7 ns 26.07 μs -0.2%
TrieBenchmark.Dictionary_SpanLookup(ItemCount: 1000) 38.62 μs 256.7 ns 39.10 μs -1.2%
TrieBenchmark.Trie_SpanLookup(ItemCount: 1000) 46.53 μs 102.3 ns 46.41 μs +0.3%
TrieBenchmark.Dictionary_SpanLookup(ItemCount: 100000) 6.29 ms 136.46 μs 6.43 ms -2.2%
TrieBenchmark.Trie_SpanLookup(ItemCount: 100000) 10.12 ms 194.96 μs 10.40 ms -2.7%
EnumSetBenchmark.HashSet_Union 404.9 ns 6.0 ns 423.3 ns -4.3%
EnumSetBenchmark.EnumSet_Union 22.6 ns 0.4 ns 23.0 ns -1.9%
BTreeDictionaryBenchmark.SortedDictionary_Add(ItemCount: 1000) 46.42 μs 281.2 ns 47.00 μs -1.2%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 1000) 12.43 μs 47.3 ns 12.45 μs -0.2%
BTreeDictionaryBenchmark.BTreeDictionary_Add(ItemCount: 1000) 54.29 μs 856.9 ns 55.73 μs -2.6%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 1000) 29.77 μs 100.9 ns 29.88 μs -0.4%
BTreeDictionaryBenchmark.SortedDictionary_Add(ItemCount: 100000) 25.38 ms 140.33 μs 25.41 ms -0.1%
HyperLogLogBenchmark.HashSet_Add(ItemCount: 100000) 5.00 ms 57.21 μs 5.01 ms -0.1%
BTreeDictionaryBenchmark.BTreeDictionary_Add(ItemCount: 100000) 17.16 ms 46.20 μs 17.30 ms -0.8%
HyperLogLogBenchmark.HyperLogLog_Add(ItemCount: 100000) 493.61 μs 21.91 μs 497.89 μs -0.9%
XorFilterBenchmark.HashSet_Build(ItemCount: 1000) 8.15 μs 17.0 ns 8.20 μs -0.6%
XorFilterBenchmark.XorFilter_Build(ItemCount: 1000) 41.35 μs 821.1 ns 41.67 μs -0.8%
XorFilterBenchmark.HashSet_Build(ItemCount: 100000) 2.05 ms 26.88 μs 2.05 ms -0.1%
XorFilterBenchmark.XorFilter_Build(ItemCount: 100000) 13.21 ms 137.91 μs 13.24 ms -0.2%
XorFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 8.6 ns 4.74 μs -0.0%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 1000) 7.55 μs 4.8 ns 7.55 μs +0.0%
XorFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.52 ms 1.77 μs 1.58 ms -3.9%
XorFilterBenchmark.XorFilter_Contains(ItemCount: 100000) 801.65 μs 532.6 ns 801.58 μs +0.0%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.56 μs 3.3 ns 4.58 μs -0.4%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 1000) 7.55 μs 5.3 ns 7.55 μs -0.0%
XorFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.89 ms 77.41 μs 2.07 ms -8.4%
XorFilterBenchmark.XorFilter_ContainsMissing(ItemCount: 100000) 805.17 μs 380.6 ns 805.06 μs +0.0%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 1000) 0.0 ns 0.0 ns 0.0 ns +45.7%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 1000) 26.49 μs 233.6 ns 26.53 μs -0.1%
HyperLogLogBenchmark.HashSet_Estimate(ItemCount: 100000) 0.0 ns 0.0 ns 0.0 ns -28.1%
HyperLogLogBenchmark.HyperLogLog_Estimate(ItemCount: 100000) 27.64 μs 106.4 ns 27.72 μs -0.3%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 8) 181.8 ns 2.3 ns 172.1 ns +5.6%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 8) 76.8 ns 1.0 ns 76.8 ns +0.0%
SmallDictionaryBenchmark.Dictionary_Insert(ItemCount: 64) 801.2 ns 10.2 ns 786.6 ns +1.9%
SmallDictionaryBenchmark.SmallDictionary_Insert(ItemCount: 64) 1.03 μs 4.4 ns 1.04 μs -0.6%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.08 μs 32.7 ns 13.10 μs -0.1%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.05 μs 42.1 ns 13.05 μs +0.1%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 1000) 8.83 μs 189.4 ns 8.83 μs +0.0%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 1000) 9.99 μs 171.0 ns 10.06 μs -0.7%
CelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.30 ms 73.11 μs 4.33 ms -0.7%
HashCachingDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.97 ms 55.55 μs 5.01 ms -0.8%
CelerityDictionaryBenchmark.CelerityDictionary_Insert(ItemCount: 100000) 5.27 ms 64.92 μs 5.24 ms +0.4%
HashCachingDictionaryBenchmark.HashCachingDictionary_Insert(ItemCount: 100000) 6.84 ms 332.50 μs 6.79 ms +0.8%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 8) 38.6 ns 0.1 ns 38.6 ns +0.1%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 8) 23.2 ns 0.3 ns 23.1 ns +0.2%
SmallDictionaryBenchmark.Dictionary_Lookup(ItemCount: 64) 302.9 ns 6.1 ns 309.0 ns -2.0%
SmallDictionaryBenchmark.SmallDictionary_Lookup(ItemCount: 64) 963.9 ns 8.6 ns 972.6 ns -0.9%
BTreeDictionaryBenchmark.SortedDictionary_Lookup(ItemCount: 1000) 24.78 μs 130.5 ns 24.92 μs -0.6%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.86 μs 7.7 ns 4.71 μs +3.1%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.83 μs 5.9 ns 4.85 μs -0.4%
BTreeDictionaryBenchmark.BTreeDictionary_Lookup(ItemCount: 1000) 20.33 μs 178.8 ns 20.22 μs +0.6%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 2.39 μs 14.3 ns 2.39 μs +0.2%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 1000) 2.89 μs 2.4 ns 2.87 μs +0.5%
BTreeDictionaryBenchmark.SortedDictionary_Lookup(ItemCount: 100000) 18.65 ms 32.09 μs 18.70 ms -0.3%
CelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.60 ms 5.10 μs 1.53 ms +4.3%
HashCachingDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.55 ms 51.22 μs 1.60 ms -3.6%
BTreeDictionaryBenchmark.BTreeDictionary_Lookup(ItemCount: 100000) 14.21 ms 32.25 μs 14.24 ms -0.2%
CelerityDictionaryBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 689.44 μs 3.72 μs 728.97 μs -5.4%
HashCachingDictionaryBenchmark.HashCachingDictionary_Lookup(ItemCount: 100000) 846.72 μs 3.07 μs 849.56 μs -0.3%
BTreeDictionaryBenchmark.SortedDictionary_Mixed(ItemCount: 1000) 97.16 μs 1.19 μs 95.79 μs +1.4%
BTreeDictionaryBenchmark.BTreeDictionary_Mixed(ItemCount: 1000) 71.50 μs 1.07 μs 73.70 μs -3.0%
BTreeDictionaryBenchmark.SortedDictionary_Mixed(ItemCount: 100000) 51.04 ms 360.12 μs 50.53 ms +1.0%
BTreeDictionaryBenchmark.BTreeDictionary_Mixed(ItemCount: 100000) 27.84 ms 41.14 μs 27.82 ms +0.1%
BTreeDictionaryBenchmark.SortedDictionary_RangeScan(ItemCount: 1000) 4.59 μs 56.1 ns 4.64 μs -1.0%
BTreeDictionaryBenchmark.BTreeDictionary_RangeScan(ItemCount: 1000) 83.6 ns 1.5 ns 81.1 ns +3.1%
BTreeDictionaryBenchmark.SortedDictionary_RangeScan(ItemCount: 100000) 1.18 ms 3.18 μs 1.17 ms +0.1%
BTreeDictionaryBenchmark.BTreeDictionary_RangeScan(ItemCount: 100000) 5.80 μs 16.3 ns 5.80 μs -0.0%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 8) 1.25 μs 187.9 ns 1.37 μs -8.7%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 8) 1.31 μs 223.3 ns 1.29 μs +1.8%
SmallDictionaryBenchmark.Dictionary_Remove(ItemCount: 64) 4.39 μs 664.3 ns 4.18 μs +5.0%
SmallDictionaryBenchmark.SmallDictionary_Remove(ItemCount: 64) 20.62 μs 809.0 ns 21.11 μs -2.3%
BTreeDictionaryBenchmark.SortedDictionary_Remove(ItemCount: 1000) 689.30 μs 11.87 μs 675.18 μs +2.1%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 79.35 μs 5.03 μs 82.06 μs -3.3%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 76.35 μs 5.93 μs 78.28 μs -2.5%
BTreeDictionaryBenchmark.BTreeDictionary_Remove(ItemCount: 1000) 282.54 μs 11.30 μs 287.58 μs -1.8%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 1000) 127.52 μs 4.83 μs 124.03 μs +2.8%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 1000) 113.33 μs 8.53 μs 109.29 μs +3.7%
BTreeDictionaryBenchmark.SortedDictionary_Remove(ItemCount: 100000) 28.33 ms 802.80 μs 28.36 ms -0.1%
CelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.99 ms 10.32 μs 2.01 ms -1.0%
HashCachingDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.00 ms 20.70 μs 2.01 ms -0.8%
BTreeDictionaryBenchmark.BTreeDictionary_Remove(ItemCount: 100000) 19.39 ms 87.03 μs 19.53 ms -0.7%
CelerityDictionaryBenchmark.CelerityDictionary_Remove(ItemCount: 100000) 1.70 ms 32.80 μs 1.69 ms +0.7%
HashCachingDictionaryBenchmark.HashCachingDictionary_Remove(ItemCount: 100000) 1.89 ms 52.43 μs 1.90 ms -0.3%
BTreeSetBenchmark.SortedSet_Add(ItemCount: 1000) 42.93 μs 1.44 μs 42.16 μs +1.8%
CeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 12.85 μs 335.4 ns 12.77 μs +0.6%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 1000) 10.51 μs 44.5 ns 10.43 μs +0.7%
BTreeSetBenchmark.BTreeSet_Add(ItemCount: 1000) 41.88 μs 97.5 ns 41.82 μs +0.1%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 1000) 9.20 μs 131.9 ns 9.15 μs +0.6%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 1000) 10.71 μs 116.8 ns 10.69 μs +0.3%
BTreeSetBenchmark.SortedSet_Add(ItemCount: 100000) 21.85 ms 222.18 μs 21.53 ms +1.5%
CeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.10 ms 122.86 μs 5.02 ms +1.6%
CountMinSketchBenchmark.Dictionary_Add(ItemCount: 100000) 1.42 ms 7.95 μs 1.46 ms -2.6%
BTreeSetBenchmark.BTreeSet_Add(ItemCount: 100000) 13.92 ms 77.77 μs 14.14 ms -1.5%
CeleritySetBenchmark.CeleritySet_Add(ItemCount: 100000) 3.24 ms 37.08 μs 3.20 ms +1.2%
CountMinSketchBenchmark.CountMinSketch_Add(ItemCount: 100000) 962.98 μs 2.11 μs 965.51 μs -0.3%
BTreeSetBenchmark.SortedSet_Contains(ItemCount: 1000) 16.74 μs 41.8 ns 16.74 μs -0.0%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.76 μs 15.2 ns 4.76 μs -0.0%
BTreeSetBenchmark.BTreeSet_Contains(ItemCount: 1000) 17.48 μs 37.7 ns 17.32 μs +1.0%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 1000) 1.85 μs 5.2 ns 1.96 μs -5.3%
BTreeSetBenchmark.SortedSet_Contains(ItemCount: 100000) 16.06 ms 215.19 μs 15.82 ms +1.6%
CeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.59 ms 14.91 μs 1.57 ms +1.3%
BTreeSetBenchmark.BTreeSet_Contains(ItemCount: 100000) 13.02 ms 31.94 μs 12.60 ms +3.4%
CeleritySetBenchmark.CeleritySet_Contains(ItemCount: 100000) 596.56 μs 3.10 μs 597.70 μs -0.2%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 1000) 4.61 μs 248.9 ns 4.37 μs +5.4%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 1000) 10.06 μs 19.0 ns 10.08 μs -0.2%
CountMinSketchBenchmark.Dictionary_Estimate(ItemCount: 100000) 494.95 μs 5.68 μs 487.77 μs +1.5%
CountMinSketchBenchmark.CountMinSketch_Estimate(ItemCount: 100000) 1.97 ms 1.74 μs 1.97 ms +0.0%
LruCacheBenchmark.Dictionary_Get(ItemCount: 1000) 25.11 μs 401.8 ns 25.53 μs -1.6%
LruCacheBenchmark.LruCache_Get(ItemCount: 1000) 6.81 μs 52.7 ns 6.85 μs -0.6%
LruCacheBenchmark.Dictionary_Get(ItemCount: 100000) 25.83 μs 172.4 ns 25.41 μs +1.6%
LruCacheBenchmark.LruCache_Get(ItemCount: 100000) 6.94 μs 123.2 ns 6.97 μs -0.3%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 1000) 4.82 μs 75.1 ns 5.13 μs -6.0%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 1000) 3.60 μs 8.3 ns 3.60 μs +0.1%
LruCacheBenchmark.Dictionary_GetMissing(ItemCount: 100000) 519.31 μs 949.0 ns 519.58 μs -0.1%
LruCacheBenchmark.LruCache_GetMissing(ItemCount: 100000) 1.34 ms 749.4 ns 1.34 ms +0.1%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.85 μs 374.2 ns 14.08 μs -1.7%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.67 μs 419.2 ns 13.72 μs -0.4%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 1000) 8.07 μs 62.9 ns 8.14 μs -0.9%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 1000) 17.77 μs 279.7 ns 18.00 μs -1.3%
PooledCelerityDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.94 ms 79.72 μs 5.05 ms -2.2%
RobinHoodDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.70 ms 84.15 μs 4.71 ms -0.1%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Insert(ItemCount: 100000) 2.97 ms 39.70 μs 2.99 ms -1.0%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Insert(ItemCount: 100000) 8.21 ms 565.79 μs 8.08 ms +1.7%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.71 μs 21.0 ns 4.73 μs -0.2%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.82 μs 59.1 ns 4.83 μs -0.2%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 1000) 2.35 μs 34.1 ns 2.58 μs -9.0%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 1000) 2.89 μs 22.4 ns 2.85 μs +1.3%
PooledCelerityDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.62 ms 11.10 μs 1.62 ms -0.2%
RobinHoodDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.61 ms 5.18 μs 1.58 ms +2.2%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Lookup(ItemCount: 100000) 727.78 μs 2.89 μs 885.62 μs -17.8%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Lookup(ItemCount: 100000) 870.42 μs 9.62 μs 870.25 μs +0.0%
BTreeSetBenchmark.SortedSet_Mixed(ItemCount: 1000) 101.12 μs 1.85 μs 101.87 μs -0.7%
BTreeSetBenchmark.BTreeSet_Mixed(ItemCount: 1000) 64.82 μs 2.58 μs 64.75 μs +0.1%
BTreeSetBenchmark.SortedSet_Mixed(ItemCount: 100000) 32.24 ms 265.47 μs 32.34 ms -0.3%
BTreeSetBenchmark.BTreeSet_Mixed(ItemCount: 100000) 23.87 ms 447.92 μs 24.32 ms -1.9%
LruCacheBenchmark.Dictionary_Put(ItemCount: 1000) 100.41 μs 2.73 μs 100.31 μs +0.1%
LruCacheBenchmark.LruCache_Put(ItemCount: 1000) 485.21 μs 22.15 μs 473.94 μs +2.4%
LruCacheBenchmark.Dictionary_Put(ItemCount: 100000) 8.19 ms 85.59 μs 8.24 ms -0.6%
LruCacheBenchmark.LruCache_Put(ItemCount: 100000) 5.82 ms 36.73 μs 5.80 ms +0.4%
BTreeSetBenchmark.SortedSet_RangeScan(ItemCount: 1000) 174.6 ns 2.7 ns 176.3 ns -0.9%
BTreeSetBenchmark.BTreeSet_RangeScan(ItemCount: 1000) 74.2 ns 0.1 ns 74.4 ns -0.3%
BTreeSetBenchmark.SortedSet_RangeScan(ItemCount: 100000) 9.75 μs 692.1 ns 10.20 μs -4.4%
BTreeSetBenchmark.BTreeSet_RangeScan(ItemCount: 100000) 5.18 μs 6.1 ns 5.22 μs -0.9%
BTreeSetBenchmark.SortedSet_Remove(ItemCount: 1000) 743.73 μs 16.10 μs 728.45 μs +2.1%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 26.62 μs 1.25 μs 29.91 μs -11.0%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 85.47 μs 9.84 μs 88.25 μs -3.2%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 83.51 μs 10.47 μs 82.34 μs +1.4%
BTreeSetBenchmark.BTreeSet_Remove(ItemCount: 1000) 272.58 μs 12.44 μs 271.12 μs +0.5%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 1000) 119.12 μs 7.88 μs 125.81 μs -5.3%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 1000) 128.85 μs 5.73 μs 119.71 μs +7.6%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 1000) 118.16 μs 10.59 μs 115.50 μs +2.3%
BTreeSetBenchmark.SortedSet_Remove(ItemCount: 100000) 25.53 ms 272.44 μs 25.57 ms -0.2%
CeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.73 ms 21.97 μs 1.71 ms +1.1%
PooledCelerityDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.08 ms 35.15 μs 2.06 ms +0.9%
RobinHoodDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.06 ms 23.00 μs 2.07 ms -0.3%
BTreeSetBenchmark.BTreeSet_Remove(ItemCount: 100000) 15.41 ms 175.67 μs 15.06 ms +2.3%
CeleritySetBenchmark.CeleritySet_Remove(ItemCount: 100000) 1.41 ms 20.07 μs 1.39 ms +0.8%
PooledCelerityDictionaryBenchmark.PooledCelerityDictionary_Remove(ItemCount: 100000) 1.66 ms 77.19 μs 1.66 ms -0.0%
RobinHoodDictionaryBenchmark.RobinHoodDictionary_Remove(ItemCount: 100000) 1.80 ms 58.88 μs 1.87 ms -3.3%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 1000) 13.51 μs 112.5 ns 12.80 μs +5.5%
SparseSetBenchmark.HashSet_Add(ItemCount: 1000) 6.78 μs 30.4 ns 6.85 μs -0.9%
SwissSetBenchmark.HashSet_Add(ItemCount: 1000) 13.23 μs 219.5 ns 12.91 μs +2.5%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 1000) 13.15 μs 33.8 ns 13.50 μs -2.6%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 1000) 8.87 μs 25.9 ns 8.79 μs +0.9%
SparseSetBenchmark.SparseSet_Add(ItemCount: 1000) 6.49 μs 52.6 ns 11.40 μs -43.1%
SwissSetBenchmark.SwissSet_Add(ItemCount: 1000) 26.17 μs 73.9 ns 25.84 μs +1.3%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 1000) 80.04 μs 91.9 ns 80.19 μs -0.2%
PooledCeleritySetBenchmark.HashSet_Add(ItemCount: 100000) 5.05 ms 63.58 μs 5.05 ms -0.1%
SparseSetBenchmark.HashSet_Add(ItemCount: 100000) 1.70 ms 33.87 μs 1.69 ms +0.4%
SwissSetBenchmark.HashSet_Add(ItemCount: 100000) 4.95 ms 56.37 μs 4.95 ms +0.0%
TopKSketchBenchmark.Dictionary_Add(ItemCount: 100000) 3.22 ms 44.00 μs 3.27 ms -1.6%
PooledCeleritySetBenchmark.PooledCeleritySet_Add(ItemCount: 100000) 3.18 ms 19.83 μs 3.17 ms +0.2%
SparseSetBenchmark.SparseSet_Add(ItemCount: 100000) 1.48 ms 44.45 μs 1.48 ms -0.1%
SwissSetBenchmark.SwissSet_Add(ItemCount: 100000) 4.48 ms 57.83 μs 4.47 ms +0.3%
TopKSketchBenchmark.TopKSketch_Add(ItemCount: 100000) 15.14 ms 48.75 μs 15.13 ms +0.1%
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 1000) 6.05 μs 73.0 ns 6.12 μs -1.1%
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 1000) 5.28 μs 301.6 ns 5.37 μs -1.6%
SparseSetBenchmark.HashSet_ClearRefill(ItemCount: 100000) 1.27 ms 5.09 μs 1.28 ms -0.6%
SparseSetBenchmark.SparseSet_ClearRefill(ItemCount: 100000) 685.98 μs 1.69 μs 685.96 μs +0.0%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 1000) 4.71 μs 5.8 ns 4.71 μs +0.1%
SparseSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.62 μs 2.7 ns 4.62 μs +0.0%
SwissSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 5.7 ns 4.75 μs -0.2%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 1000) 2.02 μs 28.9 ns 2.04 μs -0.8%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 1000) 1.43 μs 1.7 ns 1.43 μs +0.2%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 1000) 2.73 μs 2.0 ns 2.74 μs -0.2%
PooledCeleritySetBenchmark.HashSet_Contains(ItemCount: 100000) 1.51 ms 6.54 μs 1.55 ms -3.0%
SparseSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.24 ms 43.22 μs 1.24 ms -0.6%
SwissSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.51 ms 5.70 μs 1.51 ms -0.1%
PooledCeleritySetBenchmark.PooledCeleritySet_Contains(ItemCount: 100000) 519.89 μs 21.93 μs 528.14 μs -1.6%
SparseSetBenchmark.SparseSet_Contains(ItemCount: 100000) 263.71 μs 814.0 ns 264.89 μs -0.4%
SwissSetBenchmark.SwissSet_Contains(ItemCount: 100000) 445.50 μs 31.50 μs 448.85 μs -0.7%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 4.3 ns 4.57 μs -0.0%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 1000) 2.51 μs 6.1 ns 2.51 μs -0.0%
SwissSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 2.03 ms 30.24 μs 2.01 ms +1.1%
SwissSetBenchmark.SwissSet_ContainsMissing(ItemCount: 100000) 316.71 μs 1.06 μs 316.46 μs +0.1%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 1000) 1.66 μs 1.2 ns 1.66 μs +0.1%
DequeBenchmark.Deque_Enumerate(ItemCount: 1000) 1.06 μs 0.8 ns 1.06 μs -0.0%
DequeBenchmark.LinkedList_Enumerate(ItemCount: 100000) 152.31 μs 143.9 ns 152.48 μs -0.1%
DequeBenchmark.Deque_Enumerate(ItemCount: 100000) 105.73 μs 208.2 ns 105.80 μs -0.1%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 13.72 μs 369.9 ns 13.29 μs +3.3%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 1000) 9.37 μs 277.8 ns 9.19 μs +2.0%
IntDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 4.42 ms 82.87 μs 4.37 ms +1.2%
IntDictionaryBenchmark.IntDictionary_Insert(ItemCount: 100000) 5.14 ms 48.85 μs 5.11 ms +0.7%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 4.61 μs 3.6 ns 4.61 μs +0.0%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 1000) 2.08 μs 7.6 ns 2.08 μs -0.0%
IntDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.57 ms 6.55 μs 1.52 ms +3.5%
IntDictionaryBenchmark.IntDictionary_Lookup(ItemCount: 100000) 579.98 μs 6.48 μs 646.17 μs -10.2%
DequeBenchmark.LinkedList_PushFront(ItemCount: 1000) 42.72 μs 2.22 μs 37.82 μs +13.0%
DequeBenchmark.Deque_PushFront(ItemCount: 1000) 20.87 μs 2.34 μs 21.60 μs -3.4%
DequeBenchmark.LinkedList_PushFront(ItemCount: 100000) 2.08 ms 470.12 μs 1.80 ms +15.4%
DequeBenchmark.Deque_PushFront(ItemCount: 100000) 682.34 μs 40.30 μs 694.64 μs -1.8%
DequeBenchmark.LinkedList_Queue(ItemCount: 1000) 51.99 μs 4.92 μs 50.10 μs +3.8%
DequeBenchmark.Deque_Queue(ItemCount: 1000) 31.20 μs 2.75 μs 35.18 μs -11.3%
DequeBenchmark.LinkedList_Queue(ItemCount: 100000) 4.72 ms 39.02 μs 4.82 ms -2.2%
DequeBenchmark.Deque_Queue(ItemCount: 100000) 503.61 μs 80.51 μs 447.96 μs +12.4%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 84.64 μs 7.93 μs 79.48 μs +6.5%
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 1000) 26.89 μs 1.71 μs 30.92 μs -13.0%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 1000) 91.35 μs 5.82 μs 90.07 μs +1.4%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 1000) 120.46 μs 8.77 μs 117.21 μs +2.8%
SparseSetBenchmark.HashSet_Remove(ItemCount: 1000) 28.04 μs 2.54 μs 28.69 μs -2.2%
SwissSetBenchmark.HashSet_Remove(ItemCount: 1000) 27.76 μs 4.06 μs 30.61 μs -9.3%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 1000) 24.68 μs 2.88 μs 22.06 μs +11.9%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 1000) 66.32 μs 3.54 μs 69.85 μs -5.1%
IntDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 2.23 ms 199.80 μs 2.01 ms +11.3% ⚠️
PooledCeleritySetBenchmark.HashSet_Remove(ItemCount: 100000) 1.67 ms 15.81 μs 1.69 ms -1.4%
IntDictionaryBenchmark.IntDictionary_Remove(ItemCount: 100000) 1.97 ms 253.33 μs 1.74 ms +13.2%
PooledCeleritySetBenchmark.PooledCeleritySet_Remove(ItemCount: 100000) 1.43 ms 13.00 μs 1.43 ms -0.0%
SparseSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.48 ms 11.70 μs 1.50 ms -1.4%
SwissSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.70 ms 18.75 μs 1.71 ms -0.5%
SparseSetBenchmark.SparseSet_Remove(ItemCount: 100000) 648.34 μs 12.73 μs 660.69 μs -1.9%
SwissSetBenchmark.SwissSet_Remove(ItemCount: 100000) 863.39 μs 16.83 μs 892.60 μs -3.3%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 1000) 32.2 ns 0.9 ns 32.8 ns -2.0%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 1000) 1.18 μs 23.6 ns 1.23 μs -4.1%
TopKSketchBenchmark.Dictionary_TopK(ItemCount: 100000) 33.0 ns 0.7 ns 34.8 ns -5.3%
TopKSketchBenchmark.TopKSketch_TopK(ItemCount: 100000) 1.17 μs 14.5 ns 1.20 μs -2.1%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 1000) 12.60 μs 61.7 ns 13.62 μs -7.5%
IntSetBenchmark.HashSet_Add(ItemCount: 1000) 12.83 μs 266.6 ns 12.73 μs +0.8%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 1000) 12.74 μs 113.2 ns 12.56 μs +1.5%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 1000) 7.94 μs 15.1 ns 8.00 μs -0.8%
IntSetBenchmark.IntSet_Add(ItemCount: 1000) 9.49 μs 157.1 ns 9.48 μs +0.2%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 1000) 14.12 μs 340.7 ns 13.74 μs +2.7%
CuckooFilterBenchmark.HashSet_Add(ItemCount: 100000) 4.93 ms 91.00 μs 4.85 ms +1.6%
IntSetBenchmark.HashSet_Add(ItemCount: 100000) 5.30 ms 111.01 μs 5.29 ms +0.1%
RobinHoodSetBenchmark.HashSet_Add(ItemCount: 100000) 5.07 ms 110.32 μs 5.11 ms -0.6%
CuckooFilterBenchmark.CuckooFilter_Add(ItemCount: 100000) 2.34 ms 21.73 μs 2.33 ms +0.3%
IntSetBenchmark.IntSet_Add(ItemCount: 100000) 3.52 ms 23.04 μs 3.56 ms -1.2%
RobinHoodSetBenchmark.RobinHoodSet_Add(ItemCount: 100000) 6.71 ms 102.60 μs 6.75 ms -0.7%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 1000) 18.96 μs 446.1 ns 17.81 μs +6.4%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 1000) 17.08 μs 49.4 ns 15.72 μs +8.7%
DisjointSetBenchmark.Dictionary_Components(ItemCount: 100000) 4.58 ms 99.41 μs 4.44 ms +3.2%
DisjointSetBenchmark.DisjointSet_Components(ItemCount: 100000) 3.27 ms 31.45 μs 3.28 ms -0.2%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 1000) 9.52 μs 9.3 ns 9.77 μs -2.5%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 1000) 13.41 μs 416.2 ns 13.18 μs +1.7%
DisjointSetBenchmark.Dictionary_Connected(ItemCount: 100000) 155.22 μs 736.5 ns 155.30 μs -0.1%
DisjointSetBenchmark.DisjointSet_Connected(ItemCount: 100000) 286.99 μs 1.50 μs 286.15 μs +0.3%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 1000) 4.76 μs 25.1 ns 5.20 μs -8.4%
IntSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.71 μs 29.0 ns 4.72 μs -0.1%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.74 μs 4.7 ns 4.74 μs +0.1%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 1000) 5.55 μs 2.6 ns 5.55 μs +0.0%
IntSetBenchmark.IntSet_Contains(ItemCount: 1000) 1.91 μs 22.2 ns 1.92 μs -0.1%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 1000) 2.83 μs 4.2 ns 2.83 μs -0.1%
CuckooFilterBenchmark.HashSet_Contains(ItemCount: 100000) 1.52 ms 5.56 μs 1.53 ms -0.8%
IntSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.51 ms 3.21 μs 1.51 ms +0.2%
RobinHoodSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.55 ms 21.66 μs 1.52 ms +2.4%
CuckooFilterBenchmark.CuckooFilter_Contains(ItemCount: 100000) 1.98 ms 1.66 μs 1.98 ms +0.0%
IntSetBenchmark.IntSet_Contains(ItemCount: 100000) 488.66 μs 4.03 μs 491.45 μs -0.6%
RobinHoodSetBenchmark.RobinHoodSet_Contains(ItemCount: 100000) 781.20 μs 10.62 μs 777.31 μs +0.5%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.56 μs 3.6 ns 4.56 μs -0.1%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.57 μs 4.9 ns 4.57 μs +0.1%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 1000) 9.61 μs 7.0 ns 9.61 μs -0.0%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 1000) 3.02 μs 3.9 ns 3.02 μs -0.0%
CuckooFilterBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.97 ms 4.92 μs 1.97 ms +0.0%
RobinHoodSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.98 ms 2.98 μs 1.97 ms +0.0%
CuckooFilterBenchmark.CuckooFilter_ContainsMissing(ItemCount: 100000) 985.88 μs 628.4 ns 985.81 μs +0.0%
RobinHoodSetBenchmark.RobinHoodSet_ContainsMissing(ItemCount: 100000) 1.30 ms 6.28 μs 1.30 ms +0.1%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 1000) 76.38 μs 391.2 ns 80.50 μs -5.1%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 1000) 188.00 μs 363.7 ns 188.56 μs -0.3%
IndexedPriorityQueueBenchmark.PriorityQueue_DecreaseKey(ItemCount: 100000) 35.25 ms 220.09 μs 35.41 ms -0.5%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_DecreaseKey(ItemCount: 100000) 56.38 ms 246.51 μs 57.03 ms -1.1%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 1000) 4.64 μs 27.5 ns 4.89 μs -5.1%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 1000) 29.51 μs 86.9 ns 29.72 μs -0.7%
IndexedPriorityQueueBenchmark.PriorityQueue_Enqueue(ItemCount: 100000) 1.16 ms 13.60 μs 1.17 ms -0.8%
IndexedPriorityQueueBenchmark.IndexedPriorityQueue_Enqueue(ItemCount: 100000) 6.44 ms 122.82 μs 6.42 ms +0.3%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 1000) 17.01 μs 383.7 ns 15.35 μs +10.8% ⚠️
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 1000) 9.71 μs 126.8 ns 8.93 μs +8.7%
LongDictionaryBenchmark.Dictionary_Insert(ItemCount: 100000) 5.32 ms 80.57 μs 5.34 ms -0.3%
LongDictionaryBenchmark.LongDictionary_Insert(ItemCount: 100000) 7.70 ms 87.47 μs 7.84 ms -1.8%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 1000) 5.04 μs 42.3 ns 5.09 μs -1.1%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 1000) 2.28 μs 11.5 ns 2.28 μs -0.2%
LongDictionaryBenchmark.Dictionary_Lookup(ItemCount: 100000) 1.58 ms 2.97 μs 1.57 ms +0.2%
LongDictionaryBenchmark.LongDictionary_Lookup(ItemCount: 100000) 694.55 μs 2.96 μs 678.90 μs +2.3%
IntSetBenchmark.HashSet_Remove(ItemCount: 1000) 29.42 μs 1.78 μs 28.11 μs +4.7%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 1000) 79.94 μs 7.39 μs 83.03 μs -3.7%
IntSetBenchmark.IntSet_Remove(ItemCount: 1000) 81.20 μs 7.47 μs 83.45 μs -2.7%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 1000) 83.95 μs 6.92 μs 83.51 μs +0.5%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 1000) 30.09 μs 2.78 μs 26.14 μs +15.1%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 1000) 108.58 μs 6.93 μs 110.32 μs -1.6%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 1000) 13.84 μs 109.7 ns 13.63 μs +1.5%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 1000) 14.32 μs 37.0 ns 14.31 μs +0.1%
IntSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.67 ms 14.71 μs 1.70 ms -1.3%
LongDictionaryBenchmark.Dictionary_Remove(ItemCount: 100000) 1.98 ms 30.07 μs 1.96 ms +0.8%
IntSetBenchmark.IntSet_Remove(ItemCount: 100000) 1.45 ms 12.84 μs 1.44 ms +0.9%
LongDictionaryBenchmark.LongDictionary_Remove(ItemCount: 100000) 1.81 ms 80.53 μs 1.89 ms -4.3%
RobinHoodSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.71 ms 16.77 μs 1.72 ms -1.0%
RobinHoodSetBenchmark.RobinHoodSet_Remove(ItemCount: 100000) 1.56 ms 51.47 μs 1.55 ms +0.9%
CuckooFilterBenchmark.HashSet_Remove(ItemCount: 100000) 3.89 ms 65.22 μs 3.75 ms +3.7%
CuckooFilterBenchmark.CuckooFilter_Remove(ItemCount: 100000) 4.51 ms 5.24 μs 4.50 ms +0.3%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 1000) 93.49 μs 802.4 ns 96.17 μs -2.8%
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 1000) 27.63 μs 73.9 ns 28.05 μs -1.5%
DisjointSetBenchmark.Dictionary_Union(ItemCount: 100000) 44.50 ms 1.75 ms 50.16 ms -11.3% ✅
DisjointSetBenchmark.DisjointSet_Union(ItemCount: 100000) 7.85 ms 37.98 μs 8.06 ms -2.6%
HashCachingSetBenchmark.HashSet_Add(ItemCount: 1000) 13.50 μs 439.5 ns 13.75 μs -1.8%
LongSetBenchmark.HashSet_Add(ItemCount: 1000) 14.72 μs 654.3 ns 15.23 μs -3.4%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 1000) 11.44 μs 297.4 ns 11.41 μs +0.2%
LongSetBenchmark.LongSet_Add(ItemCount: 1000) 10.24 μs 539.2 ns 9.28 μs +10.4% ⚠️
HashCachingSetBenchmark.HashSet_Add(ItemCount: 100000) 4.04 ms 324.07 μs 3.93 ms +2.9%
LongSetBenchmark.HashSet_Add(ItemCount: 100000) 4.26 ms 165.43 μs 4.22 ms +0.9%
HashCachingSetBenchmark.HashCachingSet_Add(ItemCount: 100000) 5.18 ms 128.90 μs 5.27 ms -1.6%
LongSetBenchmark.LongSet_Add(ItemCount: 100000) 5.93 ms 114.22 μs 6.03 ms -1.7%
BitSetBenchmark.BitArray_And(ItemCount: 1024) 64.9 ns 1.6 ns 66.2 ns -1.9%
BitSetBenchmark.BitSet_And(ItemCount: 1024) 992.7 ns 1.1 ns 992.7 ns -0.0%
BitSetBenchmark.BitArray_And(ItemCount: 1000000) 57.56 μs 1.62 μs 57.06 μs +0.9%
BitSetBenchmark.BitSet_And(ItemCount: 1000000) 4.58 ms 4.95 μs 4.59 ms -0.0%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 1000) 159.30 μs 592.7 ns 157.43 μs +1.2%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 1000) 5.42 ms 354.40 μs 4.99 ms +8.5%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Build(ItemCount: 100000) 28.57 ms 529.19 μs 28.50 ms +0.3%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Build(ItemCount: 100000) 1.74 s 35.50 ms 1.75 s -0.6%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.03 μs 3.7 ns 4.02 μs +0.1%
LongSetBenchmark.HashSet_Contains(ItemCount: 1000) 4.40 μs 6.2 ns 4.29 μs +2.6%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 1000) 2.33 μs 1.4 ns 2.33 μs -0.0%
LongSetBenchmark.LongSet_Contains(ItemCount: 1000) 1.92 μs 1.6 ns 1.92 μs -0.1%
StringKeyProbeBenchmark.HashSet_Contains(ItemCount: 1000) 18.62 μs 202.9 ns 18.51 μs +0.6%
StringKeyProbeBenchmark.CeleritySet_Contains(ItemCount: 1000) 24.35 μs 88.5 ns 24.47 μs -0.5%
HashCachingSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.40 ms 53.94 μs 1.45 ms -3.5%
LongSetBenchmark.HashSet_Contains(ItemCount: 100000) 1.61 ms 49.65 μs 1.55 ms +3.4%
HashCachingSetBenchmark.HashCachingSet_Contains(ItemCount: 100000) 772.22 μs 4.57 μs 772.33 μs -0.0%
LongSetBenchmark.LongSet_Contains(ItemCount: 100000) 666.31 μs 1.88 μs 663.70 μs +0.4%
StringKeyProbeBenchmark.HashSet_Contains(ItemCount: 100000) 4.92 ms 162.55 μs 4.56 ms +7.8%
StringKeyProbeBenchmark.CeleritySet_Contains(ItemCount: 100000) 6.70 ms 552.15 μs 6.36 ms +5.4%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 1000) 4.00 μs 12.2 ns 4.01 μs -0.1%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 1000) 2.74 μs 6.4 ns 2.74 μs +0.1%
HashCachingSetBenchmark.HashSet_ContainsMissing(ItemCount: 100000) 1.88 ms 6.55 μs 1.87 ms +0.8%
HashCachingSetBenchmark.HashCachingSet_ContainsMissing(ItemCount: 100000) 1.12 ms 5.87 μs 1.12 ms +0.1%
StringInternTableBenchmark.Dictionary_Dedupe(ItemCount: 1000) 34.52 μs 131.5 ns 34.09 μs +1.3%
StringInternTableBenchmark.StringInternTable_Dedupe(ItemCount: 1000) 31.75 μs 856.7 ns 31.56 μs +0.6%
StringInternTableBenchmark.Dictionary_Dedupe(ItemCount: 100000) 3.42 ms 134.33 μs 3.15 ms +8.9%
StringInternTableBenchmark.StringInternTable_Dedupe(ItemCount: 100000) 2.73 ms 2.70 μs 2.73 ms -0.0%
StringKeyProbeBenchmark.Dictionary_Lookup(ItemCount: 1000) 18.55 μs 243.2 ns 18.31 μs +1.3%
StringKeyProbeBenchmark.CelerityDictionary_Lookup(ItemCount: 1000) 27.02 μs 59.3 ns 26.92 μs +0.4%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 1000) 6.34 μs 11.7 ns 6.32 μs +0.2%
StringInternTableBenchmark.HashSet_Lookup(ItemCount: 1000) 34.07 μs 310.5 ns 33.55 μs +1.5%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 1000) 100.44 μs 2.03 μs 101.52 μs -1.1%
StringInternTableBenchmark.StringInternTable_Lookup(ItemCount: 1000) 25.97 μs 13.1 ns 25.98 μs -0.0%
StringKeyProbeBenchmark.Dictionary_Lookup(ItemCount: 100000) 4.66 ms 210.03 μs 4.76 ms -2.1%
StringKeyProbeBenchmark.CelerityDictionary_Lookup(ItemCount: 100000) 8.11 ms 741.20 μs 6.82 ms +18.9% ⚠️
FrozenCelerityDictionaryBenchmark.FrozenDictionary_Lookup(ItemCount: 100000) 2.26 ms 30.87 μs 2.38 ms -4.7%
StringInternTableBenchmark.HashSet_Lookup(ItemCount: 100000) 3.34 ms 17.36 μs 3.33 ms +0.2%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_Lookup(ItemCount: 100000) 7.91 ms 120.42 μs 7.97 ms -0.8%
StringInternTableBenchmark.StringInternTable_Lookup(ItemCount: 100000) 2.61 ms 3.76 μs 2.61 ms +0.1%
StringKeyProbeBenchmark.Dictionary_LookupMissing(ItemCount: 1000) 16.78 μs 96.2 ns 16.70 μs +0.5%
StringKeyProbeBenchmark.CelerityDictionary_LookupMissing(ItemCount: 1000) 27.60 μs 78.4 ns 27.98 μs -1.3%
StringKeyProbeBenchmark.Dictionary_LookupMissing(ItemCount: 100000) 5.32 ms 166.39 μs 5.07 ms +5.0%
StringKeyProbeBenchmark.CelerityDictionary_LookupMissing(ItemCount: 100000) 9.18 ms 860.07 μs 7.37 ms +24.5% ⚠️
BitSetBenchmark.BitArray_Or(ItemCount: 1024) 68.3 ns 2.8 ns 65.6 ns +4.2%
BitSetBenchmark.BitSet_Or(ItemCount: 1024) 993.5 ns 1.6 ns 993.4 ns +0.0%
BitSetBenchmark.BitArray_Or(ItemCount: 1000000) 54.84 μs 2.49 μs 55.21 μs -0.7%
BitSetBenchmark.BitSet_Or(ItemCount: 1000000) 4.58 ms 2.70 μs 4.52 ms +1.4%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1024) 1.14 μs 3.3 ns 1.14 μs -0.0%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1024) 5.9 ns 0.0 ns 5.9 ns +0.1%
BitSetBenchmark.BitArray_PopCount(ItemCount: 1000000) 4.88 ms 7.19 μs 4.88 ms -0.0%
BitSetBenchmark.BitSet_PopCount(ItemCount: 1000000) 8.20 μs 2.9 ns 8.20 μs +0.0%
LongSetBenchmark.HashSet_Remove(ItemCount: 1000) 65.36 μs 5.47 μs 69.39 μs -5.8%
LongSetBenchmark.LongSet_Remove(ItemCount: 1000) 71.02 μs 6.38 μs 76.65 μs -7.3%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 1000) 31.70 μs 3.84 μs 24.93 μs +27.2% ⚠️
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 1000) 98.59 μs 9.47 μs 97.10 μs +1.5%
LongSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.89 ms 25.04 μs 1.91 ms -0.9%
LongSetBenchmark.LongSet_Remove(ItemCount: 100000) 1.56 ms 71.99 μs 1.60 ms -2.2%
HashCachingSetBenchmark.HashSet_Remove(ItemCount: 100000) 1.53 ms 23.02 μs 1.54 ms -0.7%
HashCachingSetBenchmark.HashCachingSet_Remove(ItemCount: 100000) 1.65 ms 81.29 μs 1.60 ms +3.0%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_SpanLookup(ItemCount: 1000) 30.42 μs 811.4 ns 31.26 μs -2.7%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_SpanLookup(ItemCount: 1000) 91.94 μs 1.45 μs 90.64 μs +1.4%
FrozenCelerityDictionaryBenchmark.FrozenDictionary_SpanLookup(ItemCount: 100000) 10.20 ms 470.47 μs 11.03 ms -7.6%
FrozenCelerityDictionaryBenchmark.FrozenCelerityDictionary_SpanLookup(ItemCount: 100000) 9.65 ms 349.78 μs 9.60 ms +0.5%
BitSetBenchmark.BitArray_Xor(ItemCount: 1024) 63.7 ns 1.2 ns 65.5 ns -2.7%
BitSetBenchmark.BitSet_Xor(ItemCount: 1024) 992.6 ns 0.6 ns 992.8 ns -0.0%
BitSetBenchmark.BitArray_Xor(ItemCount: 1000000) 56.05 μs 999.6 ns 57.14 μs -1.9%
BitSetBenchmark.BitSet_Xor(ItemCount: 1000000) 4.59 ms 4.55 μs 4.58 ms +0.1%
Hashers (111)
Benchmark This PR StdDev main Δ
StringHasherBenchmark.Bcl_GetHashCode(Shape: ShortAscii) 15.39 μs 24.2 ns 15.40 μs -0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: ShortAscii) 15.38 μs 15.2 ns 15.40 μs -0.1%
StringHasherBenchmark.Djb2(Shape: ShortAscii) 22.71 μs 18.7 ns 22.72 μs -0.1%
StringHasherBenchmark.Djb2A(Shape: ShortAscii) 22.73 μs 32.7 ns 22.73 μs +0.0%
StringHasherBenchmark.Sdbm(Shape: ShortAscii) 33.14 μs 38.0 ns 33.15 μs -0.0%
StringHasherBenchmark.Elf(Shape: ShortAscii) 44.81 μs 173.4 ns 44.81 μs +0.0%
StringHasherBenchmark.Crc32(Shape: ShortAscii) 50.53 μs 52.4 ns 50.55 μs -0.0%
StringHasherBenchmark.Adler32(Shape: ShortAscii) 96.48 μs 56.8 ns 96.47 μs +0.0%
StringHasherBenchmark.FnV1(Shape: ShortAscii) 27.14 μs 23.0 ns 27.14 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: ShortAscii) 25.84 μs 36.2 ns 25.82 μs +0.1%
StringHasherBenchmark.FnV1A(Shape: ShortAscii) 11.05 μs 18.1 ns 11.06 μs -0.1%
StringHasherBenchmark.FnV1A_Full(Shape: ShortAscii) 25.85 μs 19.8 ns 25.86 μs -0.1%
StringHasherBenchmark.FnV1A_64(Shape: ShortAscii) 27.87 μs 20.7 ns 27.89 μs -0.1%
StringHasherBenchmark.JenkinsOaat(Shape: ShortAscii) 39.52 μs 25.1 ns 39.52 μs -0.0%
StringHasherBenchmark.Murmur2(Shape: ShortAscii) 15.39 μs 50.2 ns 15.41 μs -0.1%
StringHasherBenchmark.Murmur3(Shape: ShortAscii) 17.17 μs 61.5 ns 17.19 μs -0.1%
StringHasherBenchmark.XxHash32(Shape: ShortAscii) 16.90 μs 9.3 ns 16.91 μs -0.0%
StringHasherBenchmark.XxHash64(Shape: ShortAscii) 18.38 μs 17.2 ns 18.07 μs +1.7%
StringHasherBenchmark.XxHash3(Shape: ShortAscii) 15.42 μs 19.6 ns 15.44 μs -0.1%
StringHasherBenchmark.CityHash64(Shape: ShortAscii) 15.56 μs 8.1 ns 15.56 μs -0.0%
StringHasherBenchmark.MetroHash64(Shape: ShortAscii) 15.43 μs 11.7 ns 15.45 μs -0.2%
StringHasherBenchmark.SipHash13(Shape: ShortAscii) 27.63 μs 24.2 ns 27.64 μs -0.0%
StringHasherBenchmark.SipHash24(Shape: ShortAscii) 37.90 μs 17.6 ns 37.93 μs -0.1%
StringHasherBenchmark.HalfSipHash24(Shape: ShortAscii) 49.79 μs 118.8 ns 49.78 μs +0.0%
StringHasherBenchmark.HighwayHash64(Shape: ShortAscii) 412.29 μs 2.08 μs 411.76 μs +0.1%
StringHasherBenchmark.XxHash64_Hash64(Shape: ShortAscii) 17.36 μs 10.0 ns 17.36 μs -0.0%
StringHasherBenchmark.SipHash24_Hash64(Shape: ShortAscii) 37.86 μs 15.0 ns 37.85 μs +0.0%
StringHasherBenchmark.Bcl_GetHashCode(Shape: LongAscii) 97.03 μs 58.4 ns 96.90 μs +0.1%
StringHasherBenchmark.EqualityComparer_Default(Shape: LongAscii) 96.65 μs 46.6 ns 96.60 μs +0.0%
StringHasherBenchmark.Djb2(Shape: LongAscii) 223.82 μs 108.1 ns 223.81 μs +0.0%
StringHasherBenchmark.Djb2A(Shape: LongAscii) 223.82 μs 129.1 ns 223.80 μs +0.0%
StringHasherBenchmark.Sdbm(Shape: LongAscii) 308.10 μs 67.6 ns 308.10 μs +0.0%
StringHasherBenchmark.Elf(Shape: LongAscii) 578.78 μs 153.7 ns 578.91 μs -0.0%
StringHasherBenchmark.Crc32(Shape: LongAscii) 591.26 μs 181.2 ns 591.21 μs +0.0%
StringHasherBenchmark.Adler32(Shape: LongAscii) 786.80 μs 291.1 ns 786.94 μs -0.0%
StringHasherBenchmark.FnV1(Shape: LongAscii) 289.08 μs 55.6 ns 289.15 μs -0.0%
StringHasherBenchmark.FnV1_64(Shape: LongAscii) 282.98 μs 123.8 ns 283.00 μs -0.0%
StringHasherBenchmark.FnV1A(Shape: LongAscii) 123.08 μs 104.9 ns 122.95 μs +0.1%
StringHasherBenchmark.FnV1A_Full(Shape: LongAscii) 282.35 μs 112.3 ns 282.36 μs -0.0%
StringHasherBenchmark.FnV1A_64(Shape: LongAscii) 287.00 μs 233.8 ns 286.93 μs +0.0%
StringHasherBenchmark.JenkinsOaat(Shape: LongAscii) 378.59 μs 84.6 ns 378.57 μs +0.0%
StringHasherBenchmark.Murmur2(Shape: LongAscii) 101.75 μs 128.4 ns 101.69 μs +0.1%
StringHasherBenchmark.Murmur3(Shape: LongAscii) 115.71 μs 63.2 ns 115.78 μs -0.1%
StringHasherBenchmark.XxHash32(Shape: LongAscii) 73.68 μs 167.8 ns 73.68 μs +0.0%
StringHasherBenchmark.XxHash64(Shape: LongAscii) 94.30 μs 858.4 ns 94.75 μs -0.5%
StringHasherBenchmark.XxHash3(Shape: LongAscii) 83.15 μs 1.32 μs 81.71 μs +1.8%
StringHasherBenchmark.CityHash64(Shape: LongAscii) 123.92 μs 982.9 ns 123.32 μs +0.5%
StringHasherBenchmark.MetroHash64(Shape: LongAscii) 74.92 μs 456.5 ns 74.90 μs +0.0%
StringHasherBenchmark.SipHash13(Shape: LongAscii) 117.02 μs 87.4 ns 117.02 μs +0.0%
StringHasherBenchmark.SipHash24(Shape: LongAscii) 162.28 μs 526.3 ns 161.92 μs +0.2%
StringHasherBenchmark.HalfSipHash24(Shape: LongAscii) 250.86 μs 231.5 ns 250.97 μs -0.0%
StringHasherBenchmark.HighwayHash64(Shape: LongAscii) 880.96 μs 52.32 μs 928.25 μs -5.1%
StringHasherBenchmark.XxHash64_Hash64(Shape: LongAscii) 87.31 μs 652.8 ns 88.28 μs -1.1%
StringHasherBenchmark.SipHash24_Hash64(Shape: LongAscii) 162.28 μs 186.4 ns 162.31 μs -0.0%
StringHasherBenchmark.Bcl_GetHashCode(Shape: NonAscii) 22.87 μs 9.8 ns 22.87 μs -0.0%
StringHasherBenchmark.EqualityComparer_Default(Shape: NonAscii) 22.84 μs 16.2 ns 22.85 μs -0.0%
StringHasherBenchmark.Djb2(Shape: NonAscii) 43.07 μs 39.8 ns 43.03 μs +0.1%
StringHasherBenchmark.Djb2A(Shape: NonAscii) 43.07 μs 34.0 ns 43.06 μs +0.0%
StringHasherBenchmark.Sdbm(Shape: NonAscii) 61.67 μs 31.4 ns 61.65 μs +0.0%
StringHasherBenchmark.Elf(Shape: NonAscii) 100.30 μs 346.5 ns 100.11 μs +0.2%
StringHasherBenchmark.Crc32(Shape: NonAscii) 103.52 μs 54.0 ns 103.56 μs -0.0%
StringHasherBenchmark.Adler32(Shape: NonAscii) 174.50 μs 68.1 ns 174.48 μs +0.0%
StringHasherBenchmark.FnV1(Shape: NonAscii) 48.42 μs 28.1 ns 48.40 μs +0.0%
StringHasherBenchmark.FnV1_64(Shape: NonAscii) 50.23 μs 45.4 ns 50.22 μs +0.0%
StringHasherBenchmark.FnV1A(Shape: NonAscii) 22.00 μs 31.8 ns 21.99 μs +0.0%
StringHasherBenchmark.FnV1A_Full(Shape: NonAscii) 46.09 μs 36.4 ns 46.09 μs +0.0%
StringHasherBenchmark.FnV1A_64(Shape: NonAscii) 50.04 μs 39.0 ns 50.04 μs +0.0%
StringHasherBenchmark.JenkinsOaat(Shape: NonAscii) 73.35 μs 43.8 ns 73.34 μs +0.0%
StringHasherBenchmark.Murmur2(Shape: NonAscii) 27.00 μs 128.0 ns 27.00 μs +0.0%
StringHasherBenchmark.Murmur3(Shape: NonAscii) 31.66 μs 114.3 ns 31.66 μs -0.0%
StringHasherBenchmark.XxHash32(Shape: NonAscii) 23.88 μs 10.3 ns 23.87 μs +0.0%
StringHasherBenchmark.XxHash64(Shape: NonAscii) 30.04 μs 27.3 ns 30.05 μs -0.0%
StringHasherBenchmark.XxHash3(Shape: NonAscii) 23.54 μs 201.8 ns 23.54 μs +0.0%
StringHasherBenchmark.CityHash64(Shape: NonAscii) 22.29 μs 18.9 ns 22.26 μs +0.1%
StringHasherBenchmark.MetroHash64(Shape: NonAscii) 25.87 μs 10.9 ns 25.88 μs -0.0%
StringHasherBenchmark.SipHash13(Shape: NonAscii) 37.89 μs 100.0 ns 37.95 μs -0.2%
StringHasherBenchmark.SipHash24(Shape: NonAscii) 50.10 μs 53.4 ns 50.12 μs -0.0%
StringHasherBenchmark.HalfSipHash24(Shape: NonAscii) 73.77 μs 1.49 μs 73.43 μs +0.5%
StringHasherBenchmark.HighwayHash64(Shape: NonAscii) 490.32 μs 5.67 μs 486.48 μs +0.8%
StringHasherBenchmark.XxHash64_Hash64(Shape: NonAscii) 28.96 μs 32.3 ns 28.95 μs +0.0%
StringHasherBenchmark.SipHash24_Hash64(Shape: NonAscii) 51.56 μs 540.0 ns 52.02 μs -0.9%
IntegerHasherBenchmark.Guid_Bcl 1.27 μs 3.6 ns 1.26 μs +0.4%
IntegerHasherBenchmark.Guid_EqualityComparer 3.49 μs 20.9 ns 3.50 μs -0.3%
IntegerHasherBenchmark.Guid_Celerity 8.51 μs 15.6 ns 8.49 μs +0.2%
IntegerHasherBenchmark.Guid_Celerity_Hash64 8.01 μs 8.0 ns 8.02 μs -0.0%
IntegerHasherBenchmark.Int32_Bcl 696.2 ns 5.8 ns 685.6 ns +1.5%
IntegerHasherBenchmark.Int32_EqualityComparer 704.8 ns 4.1 ns 699.3 ns +0.8%
IntegerHasherBenchmark.Int32_Identity 688.2 ns 4.2 ns 687.1 ns +0.2%
IntegerHasherBenchmark.Int32_WangNaive 1.25 μs 0.5 ns 1.25 μs -0.0%
IntegerHasherBenchmark.Int32_Wang 3.03 μs 4.0 ns 3.03 μs -0.1%
IntegerHasherBenchmark.Int32_Murmur3 2.65 μs 2.4 ns 2.65 μs +0.1%
IntegerHasherBenchmark.Int64_Bcl 1.27 μs 1.2 ns 1.27 μs -0.1%
IntegerHasherBenchmark.Int64_EqualityComparer 1.25 μs 1.5 ns 1.25 μs +0.0%
IntegerHasherBenchmark.Int64_Identity 699.0 ns 5.2 ns 684.4 ns +2.1%
IntegerHasherBenchmark.Int64_WangNaive 1.87 μs 2.0 ns 1.87 μs +0.0%
IntegerHasherBenchmark.Int64_Wang 4.16 μs 4.2 ns 4.17 μs -0.3%
IntegerHasherBenchmark.Int64_Murmur3 2.37 μs 2.8 ns 2.37 μs +0.0%
IntegerHasherBenchmark.Int64_Wang_Hash64 4.16 μs 5.5 ns 4.16 μs +0.1%
IntegerHasherBenchmark.Int64_Murmur3_Hash64 2.37 μs 2.1 ns 2.37 μs -0.1%
IntegerHasherBenchmark.UInt32_Bcl 693.7 ns 9.6 ns 685.3 ns +1.2%
IntegerHasherBenchmark.UInt32_EqualityComparer 710.6 ns 2.8 ns 700.4 ns +1.5%
IntegerHasherBenchmark.UInt32_Default 1.25 μs 0.4 ns 1.25 μs -0.0%
IntegerHasherBenchmark.UInt32_Wang 3.02 μs 7.9 ns 3.02 μs -0.2%
IntegerHasherBenchmark.UInt32_Murmur3 2.64 μs 0.9 ns 2.65 μs -0.0%
IntegerHasherBenchmark.UInt64_Bcl 1.27 μs 0.7 ns 1.27 μs -0.1%
IntegerHasherBenchmark.UInt64_EqualityComparer 1.25 μs 0.5 ns 1.25 μs +0.0%
IntegerHasherBenchmark.UInt64_Default 2.37 μs 1.2 ns 2.37 μs -0.1%
IntegerHasherBenchmark.UInt64_Wang 4.16 μs 3.1 ns 4.16 μs -0.1%
IntegerHasherBenchmark.UInt64_WangNaive 1.87 μs 2.3 ns 1.87 μs -0.0%
IntegerHasherBenchmark.UInt64_Default_Hash64 2.37 μs 2.4 ns 2.37 μs +0.1%
IntegerHasherBenchmark.UInt64_Wang_Hash64 4.16 μs 5.6 ns 4.16 μs +0.0%

Same-runner A/B (sharded 8-way): main (06dc36b) and this PR were built and benchmarked back-to-back on the same runner per shard, so hardware variance cancels out. ⚠️ = PR mean ≥ +10% slower than main and beyond combined std-dev; ✅ = correspondingly faster.

@marius-bughiu
marius-bughiu merged commit 93359ed into main Jul 30, 2026
19 checks passed
@marius-bughiu
marius-bughiu deleted the chore/code-review/lru-mru-hit-enumerator-docs branch July 30, 2026 05:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automated:code-review PR or issue opened by celerity---code-review sweep

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants