C# fan; ex-MVP, ex-Microsoft, ex-Stack Overflow; author of Dapper, protobuf-net, SE.Redis, and a few other things. Doing Redis things at Redis.

UK
Joined March 2009
Woohoo, .NET Conf 2026, I'll be talking about SE.Redis v4 in the community days - probably active:active, client-side-caching, with that as a segue into custom commands and the new high-perf reader/writer API (no session links yet, but: dotnetconf.net/)
2
4
81
3,343
Today's job: psychic debugging PR to review: "reverts #...." - that's it, the entire body. I super want to give them the benefit of the doubt and assume there is a reason or some context, but they're not replying to me. Very frustrating. Closing it is easy, but... dammit!
1
4
1,649
RC2 didn't fix it, so logged: github.com/dotnet/runtime/is… - this is a hard "oof" for SE.Redis, otherwise (as in: performance collapses)
I thought I'd re-run my SE.Redis "async runtime" (.NET 11) checks; instead, found a catastrophic perf collapse in RC1, that I *think* (testing now against "daily") is already fixed for RC2 (github.com/dotnet/runtime/pu…). Fun!
3
6
49
6,289
I thought I'd re-run my SE.Redis "async runtime" (.NET 11) checks; instead, found a catastrophic perf collapse in RC1, that I *think* (testing now against "daily") is already fixed for RC2 (github.com/dotnet/runtime/pu…). Fun!
4
1
1
75
12,691
Hmmm.... still seeing -25% on "daily"....
1
3
1,027
Marc Gravell retweeted
Sure, OpenAI may have released yet another bot assistant thing. But I just shipped a convenient package for C# devs to source generate enum metadata. htmlcsstoimage.com/blog/fanc… Which do you think is a bigger deal?
3
5
11
977
Marc Gravell retweeted
Need the "Connect protocol" (gRPC semantics over plain http)? see: protobuf-net.Connect connect.protobuf-net.dev - works with both protobuf-net and Google.Protobuf .NET types, fully AOT
1
423
Versioning is hard... spotted in the wild: ~/.nuget/packages/xunit.v3.core.mtp-v2/4.0.0/buildTransitive/xunit.v3.core.mtp-v2.targets so... which version is that?
11
1
1
60
6,443
I love this kind of use of interceptors - kudos.
I've released v1.5.0 of PCRE​.NET with this feature. Now, an anti-pattern becomes a pattern! 🥳 Here's a quick benchmark between instance calls (`_regex.IsMatch`) and static calls (`PcreRegex.IsMatch`) over 10 million iterations:
1
1
19
6,000
More quality-of-life things in SE.Redis, so you don't find problems at runtime - Roslyn is a heck of a drug:
5
4
56
4,921
Marc Gravell retweeted
Protobuf "editions" support in protobuf-net: docs.protobuf-net.dev/editio… (including DELIMITED in .proto, which has been in protobuf-net code-first since 2008)
1
463
Marc Gravell retweeted
protobuf-net's online schema and payload tools are resurrected and improved, finally, and with a new home: protobuf-net.dev/
1
3
841
LLMs in code; about 18 months ago I was firmly on the "artisanal hand-written code" side of things; I'm very much a convert now - the code was never the goal: solving tech problems was. Most of my time now goes into designing features and correctness tests, which is far more (1)
22
20
4
403
43,732
valuable than any actual code, which is ultimately transient. I'm about to merge a feature into protobuf-net that I've wanted *for years* (build-time "AOT" emit), but which I'd failed repeatedly to land, as it is tedious iterative slog; LLMs *excel* at that, especially when (2)
2
1
58
4,974
there are robust validity tests; a 60kloc feature that would never have arrived without claude (claude.com/contact-sales/cla…). You need to think of it as an intern and provide all the safety fences, but: it is alarmingly competent.
7
53
4,752
I confess to feeling inordinately happy about how this shower-thought idea turned out...
1
38
7,019
daysWithoutForcePushBecauseWrongBranchCommandUsed = 0;
2
1
16
2,461