Blog
Technical Notes From The Hot Path
C#, .NET, memory, performance, and the engineering details that make software feel fast.ValueTask Deoptimization in .NET 11: How Runtime-Async Turns a Performance Trick into a Bottleneck
An in-depth technical analysis of why the classic synchronous-path ValueTask optimization backfires under the new experimental .NET 11 Runtime Async compilation model.
Writing a Zero-Allocation Source Generator: Roslyn, Cache-Safe Nodes, and Ref Struct Builders
A deep-dive guide to writing high-performance Roslyn Incremental Source Generators using cache-friendly syntax nodes, SequenceArray for zero-boilerplate pipeline caching, and CodeTextWriter.
Refactoring to Spans: Making Old, Allocation-Heavy C# APIs Zero-Alloc
A practical guide to refactoring legacy, allocation-heavy C# string parsing, binary decoding, and string formatting APIs into high-performance, zero-allocation span-based code.
Sockets on a Pipeline: Low-Allocation Networking with Beskar.Memory
An in-depth technical guide to building an ultra-fast TCP socket transport using System.IO.Pipelines, SocketAsyncEventArgs, and Beskar.Memory pools.
The Journey to Native Markdown: Frontmatter, Slugs, and Code Interceptors
A deep-dive article detailing the transition from expensive string post-processing to zero-allocation native features in Beskar.Markdown.
How Beskar.Markdown stays low on memory and still fast
A code-focused article about the design choices behind Beskar.Markdown: spans, compact nodes, pooled buffers, single-pass parsing, contextual rendering, and honest benchmark tradeoffs.
Span<T> in C#: stop allocating for work you can borrow
A practical introduction to Span<T>, ReadOnlySpan<T>, Memory<T>, and pooled buffers for low-allocation C# code.
C# 14 extension members: APIs that feel like they belonged there
A practical look at C# 14 extension blocks, extension properties, static extension members, operators, and why they are useful for low-allocation fluent APIs.