
Their publication
CSharpMind
C# · csharpmind.com
C#, .NET, and the runtime beneath them: the CLR, the JIT, the garbage collector and the frameworks built on top.
Author
Callum Reeve
Writes CSharpMind — C#, .NET, and the runtime beneath them.
Callum Reeve writes about C#, .NET, and the runtime beneath them. His work covers the language and its lowering — what the compiler emits for iterators, async methods, pattern matches and ref struct code, and the distance between the source and the IL; the runtime, from tiered compilation to the inlining and devirtualisation decisions that settle what actually reaches the CPU; memory and garbage collection, including allocation profiles, generation promotion and what pause-time numbers do and do not tell you; frameworks such as ASP.NET Core and EF Core, measured at the runtime level rather than described at the API level; and diagnostics — dumps, counters and traces, read directly rather than pattern-matched against folklore.
CSharpMind starts every article from one question: what is the system actually doing beneath the abstraction? A language feature, a base-class-library type and a framework middleware all present a simple surface, and that surface holds right up to the moment behaviour stops matching the mental model. It is written for people who already ship C# and have reached that point, and the bias is toward mechanisms that outlast a release. A tuning recommendation written for .NET Framework 4.5 is mostly archaeology now; an explanation of how the compiler lowers an async method into a state machine still holds.
Claims there are settled against runtime source, a documented configuration knob, or an experiment that states its SDK build and its hardware — and where a result is a property of one specific build, the article says so rather than generalising. What the site will not publish is as firm: no framework tutorials, no ranked lists, no ORM comparisons, no advocacy. Nothing is sponsored, and guest submissions are not accepted.
Callum Reeve is a publishing byline. It identifies the author of every article at csharpmind.com, and nothing else — it is not the operator of the domain named in that site's legal pages.
Every issue so far
In a dotnet-dump of a contested lock, clrstack -all marked no thread as the owner. syncblk named it, and a suspended await appeared only in dumpasync.
Environment.ProcessorCount is the CPU quota rounded up, never below 1. The thread pool minimum follows it, and Server GC switches itself off at 1.
Assigning a struct to an interface allocated 0 bytes. Passing it across a call boundary allocated 24. A constrained generic allocated none, until its body asked for an object.
Removing UseRouting dropped per-request allocation by 2.29 KB in isolation — separated from authorization's share, routing itself costs about 24 bytes.
A thread pool queue held at two thousand work items read 1986 through one provider and -13 through the other, in the same second, in the same process.
Server GC finished 2.7 times faster and collected 17 times less often — and made the slowest request in the run 5 to 13 times slower. Both numbers are real.
Blocking on a task is the case the thread pool compensates for. Blocking on a sleep or an event is the case it cannot see, and it finished 2.5 times slower.
An async method that never suspends allocates nothing. The same method, suspended once, allocates 160 bytes. The cost is not the keyword — it is the suspension.
Elsewhere in the network
ElephantPHP · JS Ledger · JVM Scope · PyDepth · SQLPress · Gopheria — six more languages, six more specialists, one imprint. Every language has a page of its own.