Newsletters

How fast is .NET 11 Runtime Async?

August 30, 2026

.NET 11's Runtime Async shifts state machine generation from the compiler to the JIT, unlocking new optimizations. Meanwhile, a deep dive into eventual consistency shows why stale data in distributed systems is a design choice, not a flaw — and why ignoring it is the real danger.

A field guide to .NET data formats

August 23, 2026

Copying blobs between Azure storage accounts? Splitting into blocks and copying in parallel within Azure cuts a 10GB transfer from over an hour to under 10 seconds. Also: Postie simplifies CQRS in ASP.NET Core by mapping commands to routes in one line.

Passkeys in ASP.NET Core 10

August 16, 2026

.NET 10 brings built-in passkey support to ASP.NET Core Identity. Separately, a solid rundown of 18 REST API security habits covers HTTPS, JWT validation, and input handling. Cache invalidation patterns and TTL strategies round out the practical picks.

.NET 11 performance edition

August 09, 2026

.NET 11 brings some solid speed wins: enum comparisons are 7x faster with zero allocations, timezone conversions doubled in speed, and GUID parsing got 20% quicker. Separately, Anton covers 20 practical ways to fix slow SQL queries — measure first, then act.

2026 .NET interview guide

August 02, 2026

.NET interviews now test real scenarios over definitions — like why injecting a scoped service into a singleton corrupts data. Also: BenchmarkDotNet paired with AI turned a branchy encoder into a branchless design, cutting latency from 8.5 ns to 1.6 ns.

Building a database in a text file

July 26, 2026

.NET 8's `TimeProvider` finally standardizes clock control for tests — pin time, call `Advance()`, and test cache expiry or retries without waiting. Separately, async code won't protect shared data: 20 parallel file writes cause crashes without explicit locks like `SemaphoreSlim`.

When our cache turned against us

July 19, 2026

Cache stampedes hit when cache misses pile up and flood your database at once. A per-key lock or ASP.NET Core's built-in HybridCache keeps only one request rebuilding while others wait. C# 15 finally adds native union types with exhaustive pattern matching enforced by the compiler.

Memory discipline and GC awareness in .NET

July 12, 2026

Frequent GC cycles quietly hurt .NET performance as short-lived objects get promoted to expensive memory tiers. Using Span, ArrayPool, and ValueTask keeps allocations low. Also, strong types can replace repeated validation across API layers, reducing duplicate code and making inputs self-validating from the start.

How to guide agents during production investigations with .NET CLI

July 05, 2026

ASP.NET cookies breaking after IIS restarts? Rick Strahl explains why encryption keys regenerate and how to fix it. Also: .NET 8 and 9 both hit end of support November 2026 — time to move to .NET 10.

How to insert-or-update without headache

June 28, 2026

EF Core's missing upsert finally gets a proper fix — raw T-SQL MERGE or BulkMerge both work, but always set a business key or records silently duplicate. Also: a version mismatch made dotnet publish deploy an empty package while showing green.

Outbox pattern in .NET

June 21, 2026

The Outbox Pattern saves messages to your database in the same transaction as business data, then a background job publishes them — no lost events on crash. Also: .NET 10 now prunes redundant NuGet packages, cutting false vulnerability warnings by 70% and restore times by half.

Process API improvements in .NET 11

June 14, 2026

.NET 11 brings the biggest update to `System.Diagnostics.Process` in years, adding deadlock-free output capture and `KillOnParentExit`. EF Core 11 trims split queries, cutting execution time by ~9% and memory use by ~10%.

The many deaths and rebirths of .NET

June 07, 2026

.NET's messy naming history is actually a survival story — Microsoft rebuilt it from scratch to stay relevant in a Linux and cloud world. Also: HybridCache in .NET 9 quietly solves cache stampedes and multi-server consistency with one simple API.

Improving C# memory safety

May 31, 2026

C# 16 is redesigning the `unsafe` keyword so every unsafe operation must appear in an explicit block with documented caller obligations — making risky code visible instead of hidden. Also worth reading: why factory patterns in ASP.NET often just shuffle complexity around, and how state machines can manage real-world workflows like Uber's trip lifecycle.

Streaming data without loading everything into memory

May 24, 2026

C# 15 finally brings union types after years of requests. Also worth reading: .NET 11 adds Zstandard compression with a new ZstandardStream API, offering fast, efficient compression with ASP.NET Core integration and dictionary support for small files.

Real-time driver location tracking in .NET

May 17, 2026

Real-time driver tracking in .NET using Redis GEO and SignalR — handling millions of GPS updates with low latency. Plus, a .NET 11 fix finally surfaces background service crashes instead of hiding them as clean shutdowns.

Removing byte array allocations using ReadOnlySpan

May 10, 2026

Discriminated unions finally land in .NET 11, letting functions return multiple result types with compiler-checked handling. Also worth reading: validate config at startup with IValidateOptions to catch missing values before your app accepts traffic.

High-performance distributed caching with .NET

May 03, 2026

Two-layer caching in .NET can cut response times from seconds to under a millisecond. Also worth reading: ASP.NET Core cookies can silently break auth in production, and C# 15 union types now enforce exhaustive pattern matching at build time.

How I accidentally made the fastest C# CSV parser

April 26, 2026

SIMD lets a CPU scan 32 bytes at once, making it possible to build a CSV parser that finds field boundaries in one pass and only decodes text on demand — beating most C# parsers in benchmarks. Also: Output Cache in ASP.NET can skip your database entirely on repeat requests, with Redis support for multi-instance apps.

Architectural tests in .NET

April 19, 2026

Copilot merged 535 of 878 pull requests in the .NET runtime after the team tuned its setup. Architectural tests can enforce design rules automatically, catching structural drift before it builds up. Health checks that test real dependencies help pinpoint failures fast.