.NET 8/9 `FrozenDictionary<TKey, TValue>` & `FrozenSet<T>`
1Concept
`FrozenDictionary` and `FrozenSet` optimize read-only lookup datasets. At creation, the compiler constructs a perfect hash table or jump table, providing near-instantaneous O(1) lookups with zero lock contention.
2Architecture Diagram
Immutable Read-Heavy Dataset (Config / Route Maps)
│
▼ .ToFrozenDictionary()
[ Perfect Hash Table / Direct Memory Jump Table ]
├── Zero write locks
└── 30-50% faster read lookups than standard Dictionary!3Code Example
C# 13 & .NET 9
using System;
using System.Collections.Frozen;
using System.Collections.Generic;
public class FrozenCollectionDemo
{
public static void Main()
{
var rawRoutes = new Dictionary<string, string>
{
["/api/v1/auth"] = "AuthHandler",
["/api/v1/users"] = "UserHandler",
["/api/v1/metrics"] = "MetricsHandler"
};
// Construct FrozenDictionary (.NET 8/9)
FrozenDictionary<string, string> frozenRoutes = rawRoutes.ToFrozenDictionary(StringComparer.Ordinal);
bool exists = frozenRoutes.TryGetValue("/api/v1/users", out var handler);
Console.WriteLine($"Frozen Route Matched: {exists} -> {handler}");
Console.WriteLine($"Is Frozen Read-Only: True");
}
}4Expected Output
Frozen Route Matched: True -> UserHandler Is Frozen Read-Only: True
5Key Takeaways
- ✓Use `ToFrozenDictionary()` for routing tables, DI singletons, and lookup caches initialized at startup.
- ✓Building a frozen collection is slightly more expensive upfront to make all subsequent reads ultra-fast.
- ✓Thread-safe by design since mutation is prohibited.