Back to all posts

.NET 6 is Here, and It Brought Performance With It

Posted on Nov 09, 2021

Posted in category:

As I'm sure you have already heard, .NET 6 was released on November 8th, 2021, and I have to say as much as I've been testing/playing with the preview releases real-life usage shows some of the highlights of this release. You can scour the linked announcement and all associated items for fun new stuff included; the list is plentiful. However, I thought I'd take this time to dive in with the performance side of things.

Performance, Performance, and More Performance

You can often find the extent of the improvements included in a release based on what items in the "big announcement" get additional detailed announcements. Performance improvements received not only big notes in the actual announcement but additionally two detailed articles; Performance Improvements in .NET 6 and File IO Improvements in .NET 6.

These articles dive into some detailed technical analysis which I can appreciate; however, many developers don't find that information as "fun" as I do. So rather than diving into the specifics of what all is improved, I thought it would be beneficial to move a few production workloads to .NET 6 and compare some key metrics between old and new, with the ONLY change being .NET 5 to 6.

The Scoring Targets

For testing, I wanted to focus on a few key metrics that I could easily compare before & after metrics. The following metrics were collected as part of this exercise.

    • Largest Contentful Paint (LCP) - How long it takes the largest visual element to paint
    • Total Blocking Time - How much time was spent blocked by scripts
    • Time to First Byte (TTFB) - How long it took to get the first byte of the response
    • Time to Interactive - How long until you can interact with the site
    • Fully Loaded Time - How long the entire website load took

I selected these metrics as they relate directly to how a site feels to visitors, and some are part of the Google Core Web Vitals, which can impact SEO placement.

The Test Subject

I've completed this testing against four different sites of similar architecture and will be sharing detailed results of the testing for this website. I focused testing on two critical path pages, the homepage and the blog landing page. However, results proved to be consistent for sub-sections as well.

I collected metrics BEFORE the upgrade to .NET 6, upgraded the project to .NET 6 only changing the target and re-publishing, and re-tested the site. I used an average over 3 tests each time to account for variable internet connectivity etc.

The Homepage

Metric Before After % Improvement
Largest Contentful Paint (LCP) 931ms 655ms 29.7%
Total Blocking Time 26ms 0  
Time to First Byte (TTFB) 172ms 161ms 6.4%
Time to Interactive 921ms 342ms 62.9%
Fully Loaded Time 931ms 656ms 29.5%

Overall a great improvement in performance. I saw similar numbers with other sites that I tested this on.

The Blog Page

This page is a little more lightweight in operation and includes more images, so its baseline was faster, however, the upgraded page still showed gains.

Metric Before After % Improvement
Largest Contentful Paint (LCP) 565ms 436ms 22.8%
Total Blocking Time 17ms 0ms  
Time to First Byte (TTFB) 173ms 173ms 0%
Time to Interactive 565ms 401ms 29.0%
Fully Loaded Time 773ms 619ms 19.9%

In Conclusion

It's always nice when you can do a quick "update" and walk away with tangible performance improvements. We get this, and so much more with .NET 6! Are you seeing the same thing across your projects?