.NET 6 is almost ready for prime time

Maourice Gonzalez

dotnet apple silicon arm64 support

Many of us are barely getting acquainted with .NET 5 and all of its goodies yet here comes .NET 6 marching forward at the speed of light headed into its second to last preview release. There are many improvements and new features in tow, we’re going to dive into a few here and get you all the information you need to ensure you’re ready to reap its benefits!

Here are some of my favorite features in this release

x64 Emulation is coming along

Support for Apple Silicon and ARM64 is present however its not quite where it needs to be as it lacks straight forward emulation support. The team is working through some necessary features in order to improve the x64 development experience. However its good to see this progress and undoubtedly this will be ready for the general availability release.

This is an important step towards making ARM64 a first class citizen in the world of Windows PCs and tablets. The Surface Pro X launched in October 2019 with questionable success. The specs of the device were impressive on paper, however in practice, it failed to impress. x86 was present at launch via emulation with x64 coming in quite some time later. At that point in time Apple had yet to launch its M1 powered Macs; this meant the poor performance of non ARM64 applications was simply attributed to the reality of emulation. However Apple’s Rosetta showed the world that emulation did not necessarily mean poor performance.

As with most things in life, competition more often than not results in advances to remain in the game. These new features and improvements will determine the future ARM64 powered devices Windows devices.

Crossgen2 replaces Crossgen

Crossgen ahead-of-time compilation for your code, this dramatically improves start up time for your application. It works by JITing all assemblies and storing the results so they can be quickly fetched at start time. Apparently having originated within the .NET Framework meant Crossgen lacked the versatility needed for the new cross-platform scenarios .NET Core makes possible. That is where Crossgen2 comes in, it is being built from the ground up to efficiently support a wider variety of target environments like Linux and macOS.

Let’s face it, no one likes to wait around for apps to launch. Whether you are dealing with a desktop, mobile or web app, instant response is the expectation. One of the cornerstones of Windows Phone was its ability to run well even on budget and mid level devices. With Windows 10 Mobile, applications struggled to instantly launch even on top of the line flagship phones. Splash screens which were mostly missing from Windows Phone became a mainstay of the experience. The constant waiting around when launching or switching between apps was picked up by most tech reviewers and enthusiasts and did not help the chances of people taking the new platform seriously.

As hardware has pushed forward at an incredibly rapid pace, software developers have gotten a bit lazy when it comes to optimizing their applications. Sometimes this is a choice, but in some cases the time it takes to implement optimizations and improvements simply outweigh the benefit. Developers sometimes rather suggest users migrate to more powerful devices with SSDs and more memory than spend the time to make sure they are making the most of the resources their apps consume. Tools like Crossgen2 allow us to with very little effort bring tangible improvements to the experience, whether its a back end service, a windows application or an API. Every millisecond counts!

There are many more improvements along for the ride with this release. To ensure you’re getting the best results, make sure you are running the latest version of Visual Studio 2022 preview as well as .NET 6 Preview 6. For more information head over to the official announcement blog post.

What are your thoughts on the fast pace of .NET development? Do you feel Microsoft seems to be going too fast given they just launched .NET 5? or do you see this as a good thing as long as upgrading remains easy and does not break previous implementations?