Digests » 340

this week's favorite

The updated GetGCMemoryInfo API in .NET 5.0 and how it can help you

In .NET 3.0 we introduced a GC.GetGCMemoryInfo API for library code to get memory load related things (this was used in ArrayPool for example) so it exposed things library folks wanted at the time. In 5.0 I got requests from folks to monitor more things about the GC. Instead of adding a bit of info each time someone asks, I really thought about the kinds of things that would help with monitoring and diagnostics and expanded the info provided by this API significantly. It also has a new overload, documented here. The returned GCMemoryInfo struct has many more properties.

C# 9 Records as DDD Value Objects

Today, we’ll talk about the new C# 9 feature, Records, and whether or not they can be used as DDD value objects.

Exploring the async/await State Machine – The Awaitable Pattern

This is the first article in a series where I’ll explore how the C# compiler translates async methods to IL (Intermediate Language) code, so it just works for the developers.

Managing bounced emails with AWS SES and Azure Functions

This post will show you how to implement a local list of bounced emails with AWS Simple Email Service (SES) and Azure Functions.

.NET Internals: System.Threading.Channels

In this post, we will start going a bit deeper and study the internal implementation details for UnboundedChannel<T>. While this level of knowledge is not necessary to use the Channels feature, I find it interesting and useful to seek to understand at least one layer of abstraction below my own code. I’ve previously written about this in my post “Become a better developer by reading source code“. This post will be the first of three, which explore UnboundedChannel<T>. Today, we’ll focus on the class inheritance and how an UnboundedChannel is created.

Join over 23,900 readers for a free weekly email with fresh news, articles and tutorials.