#576 – September 28, 2025
DATAS is a bit different
Preparing for the .NET 10 garbage collector
24 minutes by Maoni Stephens
.NET 10 will include DATAS, a garbage collection feature that automatically adjusts memory usage based on application needs. DATAS reduces memory consumption when workloads are light and increases it during peak times. However, it may hurt performance for applications that prioritize throughput over memory efficiency. Users should test their applications and consider disabling DATAS if startup speed or maximum throughput are critical.
Replace endless PR comments with 15 minutes in Tuple
sponsored by Tuple
Going back and forth in GitHub comments is painfully slow, but scheduling a meeting in Teams is somehow worse. With Tuple, you can hop on a live call in a single click; shared control and intuitive annotations by default, no persistent UI, and almost no lag. Stop waiting. Start pairing.
Expression trees in C#: Building dynamic LINQ queries at runtime
6 minutes by Ali Hamza Ansari
Expression trees in C# create code and LINQ queries at runtime without endless if-else blocks. They work as tree-like data structures where each node represents operations like method calls or constants. Entity Framework uses them to convert LINQ queries into SQL statements automatically. You can build dynamic filters based on user input, but they have limits like no support for loops and performance overhead from compilation.
Progressive builder pattern: Enforcing type safety in fluent C# APIs
5 minutes by Jorge Gamba
A generic builder pattern works for testing but lacks safety for production APIs. The Optional Progressive Builder pattern creates type-safe object construction by using different builder classes for each property combination. Each builder only shows remaining options, preventing duplicate assignments and providing compile-time validation. This approach trades implementation complexity for better developer experience and API safety.
Distributed locking in .NET: Coordinating work across multiple instances
6 minutes by Milan Jovanović
Distributed locking prevents multiple application instances from accessing the same resource simultaneously. This solves problems like race conditions and duplicate work when scaling applications across multiple servers. You can implement it using database advisory locks or libraries like DistributedLock that support PostgreSQL, Redis, and SQL Server backends.
Optimizing performance in ASP.NET Core APIs: From caching to async DB queries
6 minutes by Chandrashekhar Sharma
Chandrashekhar explains key techniques to boost ASP.NET Core API performance. He covers caching strategies to reduce database calls, async programming for better concurrency, and EF Core optimizations for faster queries. The guide also discusses moving heavy tasks to background jobs and using logging and monitoring to track performance issues. These combined approaches can dramatically improve API speed and scalability.
And the most popular article from the last issue was: