Phase 4 of 30 · Topic 4.5

Pattern Matching Anti-Patterns & Performance Pitfalls

1Concept

Overusing complex deep recursive patterns on hot paths with dynamic boxing or interface dispatches can degrade performance. Ensure pattern types match concrete sealed types for direct JIT inlining.

2Architecture Diagram

Unsealed Interface Pattern:
[ IComponent ] ──> Dynamic type check (O(N) interface scan)

Concrete Sealed Pattern:
[ SealedComponent ] ──> Direct TypeHandle compare (1 CPU instruction `cmp rax, [rcx]` )

3Code Example

C# 13 & .NET 9
using System;

public sealed class FastPayload { public int Value = 42; }

public class PatternPerformanceDemo
{
    public static void Main()
    {
        object payload = new FastPayload();

        // High-speed direct type comparison
        if (payload is FastPayload fast)
        {
            Console.WriteLine($"High performance matched value: {fast.Value}");
        }
    }
}

4Expected Output

High performance matched value: 42

5Key Takeaways

  • Match against concrete sealed classes rather than generic interfaces where performance matters.
  • Order switch arms with highest frequency branches on top for non-jump-table patterns.
  • Avoid allocating captured variables in closures inside `when` guards.