Developer Support

Services for Microsoft Premier and Unified Support Customers

gRPC + ASP.NET Core as a Migration Path for WCFs in .NET Core

The intended audience for this blog post is one who wants to migrate from the full .Net Framework to .NET Core and has a large library of WCFs, now considered technical debt. This post will attempt to at least partially answer the question: How difficult will it be to migrate my current code base of WCFs to gRPC in .NET Core?

Performance implications of default struct equality in C#

If you're familiar with C#, then you most likely heard that you should always override Equals and GetHashCode for custom structs for performance reasons. To better understand the importance and the rationale behind this advice we're going to look at the default behavior to see why and where the performance hit comes from. Then we'll look at a ...

Dissecting new generic constraints in C# 7.3

During the last Build conference, Microsoft has announced the next version of Visual Studio with C# 7.3 support. This is yet another minor language update with some quite interesting features. The main change was related to generics, starting from C# 7.3 there 3 more constraints: unmanaged, System.Enum and System.Delegate. The unmanaged ...

Performance traps of ref locals and ref returns in C#

The C# language from the very first version supported passing arguments by value or by reference. But before C# 7 the C# compiler supported only one way of returning a value from a method (or a property) - returning by value. This has been changed in C# 7 with two new features: ref returns and ref locals. But unlike other features that were...

The ‘in’-modifier and the readonly structs in C#

C# 7.2 got two very important features for high-performance scenarios -- the readonly structs and the in parameters. But to understand why this additions are so important and how they're related to each other we should look back in history. As you probably know, the .NET ecosystem has two family of types -- the value types (a.k.a. structs) ...

Dissecting the async methods in C#

The async series The C# language is great for developer's productivity and I'm glad for the recent push towards making it more suitable for high-performance applications. Here is an example: C# 5 introduced 'async' methods. The feature is very useful from a user's point of view because it helps combining several task-...

Dissecting the tuples in C# 7

System.Tuple types were introduced in .NET 4.0 with two significant drawbacks: (1) tuple types are classes and (2) there was no language support for constructing/deconstructing them. To solve these issues, C# 7 introduces new language feature as well as a new family of types (*). Today, if you need to glue together two values to return them...