Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier...
In the previous post, we discussed the foundations for automatic data encryption of properties during serialisation using System.Text.Json. In this post, we’ll continue our journey, moving toward...
View ArticleThe Grand Mystery of the Missing 18 Bytes
In this brief blog post, I will share the tale of the mystery surrounding the missing 18 bytes. While preparing a new conference session on practical application performance optimisation, I reviewed...
View ArticleTalk: Application Performance Optimisation in Practice (60 mins)
Abstract Application performance always matters. Sometimes critically, sometimes subtly, but it’s never irrelevant. While many developers rightly caution that “premature optimisation is the root of...
View ArticleEncrypting Properties with System.Text.Json and a TypeInfoResolver Modifier...
In this multi-part blog series, we’ll build a reasonably full-featured code base for automatically encrypting/decrypting specific properties on types that are being serialised and deserialised using...
View ArticleHow dotnet.exe resolves and loads the hostfxr library – Exploring the .NET muxer
In this post, we will continue our journey into the functionality and implementation of dotnet.exe, specifically focusing on how the hostfxr library is resolved and loaded. This post follows part one...
View ArticleA Brief Introduction to the .NET Muxer (aka dotnet.exe)
This post marks the start of what I expect will be a long-term effort to explore the inner workings of .NET, expose the “magic” behind the scenes, and explain the mechanisms and underlying components...
View ArticleImplementing ASP.NET Core Automatic Span (Activity) Linking for Internal...
Today, I’ll continue a current theme for my content based on my experiences implementing OpenTelemetry instrumentation in practice for .NET applications. In this post, I want to focus on a minor...
View ArticleAn Efficient Dictionary for IPAddress Tracking using .NET 9 with...
In this post, I will introduce and demonstrate enhancements to collections in .NET 9 and C# 13 for low-allocation code paths. Specifically, I will demonstrate using a custom IAlternateEqualityComparer...
View ArticleReceiving GitHub Webhooks When Using the ASP.NET Core Developer Certificate
SERIES: A Guide to Developing GitHub Apps on .NET For the last couple of weeks, I have been experimenting with creating a GitHub App using .NET. I’ve been pursuing this because I have an idea for an...
View ArticleDisabling Recording of an Activity (span) in .NET OpenTelemetry Instrumentation
I’ve recently been building some hobby code to dogfood the various observability tooling we develop at Elastic. Additionally, I’ve been interested in identifying the pain points of using our products...
View ArticleUnderstanding System.Diagnostics DiagnosticSource and DiagnosticListener...
Throughout its history, .NET has evolved various mechanisms to “log” diagnostic information inside applications and libraries, including TraceSource, EventSource, ILogger, and DiagnosticSource, the...
View ArticleAuthenticating a .NET GitHub App using a JSON Web Token (JWT)
In this post, I cover the steps required to create and sign a JSON Web Token, herein abbreviated as JWT, to authenticate a GitHub App built using .NET. I want to state clearly up front that I’m...
View ArticleProfiling Memory Allocations on Linux using the JetBrains dotMemory...
In a previous post (Automating memory profiling with the JetBrains dotMemory Profiler API), I described the steps that could be used to automate the collection of memory snapshots and profiling data...
View ArticleAutomating Memory Profiling with the JetBrains dotMemory Profiler API
Those who have read some of my previous performance-focused blog posts will know that I use the dotMemory product from JetBrains when working on code optimisations. In this post, I want to demonstrate...
View ArticleIntroducing the new IHostedLifecycleService Interface in .NET 8
As regular readers will be aware, an area of .NET which I follow closely is Microsoft.Extensions.Hosting. I’ve already blogged about a change in .NET 8, where new concurrency options have been...
View ArticleConcurrent Hosted Service Start and Stop in .NET 8
In this post, I will describe a new feature of the Microsoft.Extensions.Hosting library coming in .NET 8 (available since preview 4) affecting hosted services. Let’s first begin with a brief recap of...
View ArticleAccessing State in System.Text.Json Custom Converters
In this post, I describe several techniques that can provide additional state to custom JsonConverters when using System.Text.Json. While building the new .NET client for Elasticsearch, one of the key...
View ArticleCreating, Inspecting and Decompiling the World’s (Nearly) Smallest C# Program
In this post, I thought it might be fun to create the world’s (nearly) shortest C# program and then deep dive into some of the fine details of what happens behind the scenes. This post is not intended...
View ArticleUsing the Roslyn APIs to Analyse a .NET Solution
In a previous post “Getting Started with the Roslyn APIs: Writing Code with Code“, I demonstrated a relatively simple way to generate code using the Roslyn APIs. In this post, I want to revisit the...
View ArticleCustom JSON Serialisation with System.Text.Json Converters
This post is my contribution to the .NET Advent calendar. Make sure you check out the other amazing posts on the lead up to Christmas! At the time of writing, I am deep into work on some significant...
View Article