.NET is a powerful developer platform providing developers with programming languages, libraries, and tools for creating many different types of web and mobile apps.
A new version of .NET gets released every November, so it’s high time we got our hands on .NET 7 which has been in the making for some time.
This article will:
Let’s see what Microsoft has in store for us this year.
As a quick reminder – .NET was designed by Microsoft as a free, open-source developer platform consisting of tools, programming languages, and libraries for building applications of various kinds.
You can write .NET apps using well-known languages:
By using .NET, developers get access to multiple languages, editors, and libraries that can be used for:
.NET was designed to reduce programming errors by following a modular approach to software design. What other benefits does .NET bring to the table?
.NET allows faster development of high-quality apps, providing developers with constructs like asynchronous programming, generics, and Language Integrated Query (LINQ). Multi-language support, extensive class libraries, powerful tooling delivered by the Visual Studio family, as well as common APIs are what make .NET the most productive platform.
With .NET, you can build apps for any platform. This means developers can reuse one code while building mobile applications, server applications, or high-scale cloud microservices.
.NET was ranked one of the top most-loved frameworks on the Stack Overflow Developer Survey for four consecutive years (from 2019 to 2022).
.NET is super fast, which means your apps have better response times and need less computing power. When benchmarked against tasks like JSON serialization, server-side template rendering, or database access .NET gets the job done quicker than any other framework.
.NET is supported by Microsoft, which takes security very seriously. The platform is frequently updated to address any potential security threats quickly and effectively.
There are over 5,000,000 .NET developers all around the world. This means you can leverage the ecosystem and easily find answers to technical challenges. From the business perspective, this means the high availability of developers when scaling the project.
Worldwide customers rely on .NET to help them address their business needs and solve industry problems. Among them are Stack Overflow, UPS, GE Aviation, GoDaddy, Microsoft Teams, and the American Cancer Society. .NET is prepared to operate in an enterprise environment and gives the ability to scale the business with no downtime.
.NET gives a standard set of class libraries and APIs that are used by all .NET apps. Each app model can also expose additional APIs specific to a given operating system.
.NET is open source and fosters open development and collaboration around the ecosystem. This means thousands of developers contribute to the platform.
Tools delivered by .NET provide a great development experience with thousands of editors and extensions.
As we already mentioned, .NET is supported and developed by Microsoft, and they take care of its regular updates.
.NET 7 is the newest version of the platform which delivers important changes while still continuing the legacy of .NET 5. This means we can see a focus on the integration and unification of the platform’s modules.
.NET 7 was released to further optimize the platform, increasing its effectiveness and speed. Those speed changes are a result of introducing the On-Stack Replacement mechanism (OSR) in 2020.
A new version of the platform gets released every year. .NET 7 was officially released on November 8th, 2022, replacing .NET 6.
Starting from this update, the new APIs allow you to add a single object instance to the `System.Composition.Hosting`.
Bringing improvements in support for the cloud-native specification (OpenTelemetry), however, it’s still under development.
Microsoft has also focused on cryptographic security by making building on `X500DistinguishedName` easier and more secure.
Blazor is a web app development framework and one of its main features is the ability to run the application views on the client side. On the other hand, .NET MAUI is Microsoft’s framework focusing on mobile applications and is said to be the evolution of Xamarin. That being said, Microsoft is currently working on blending those two together and creating Blazor Hybrid for building native apps.
.NET 7 brings facilitation of creating cloud-native applications with various improvements concerning the developer experience. This will simplify the installation and configuration of the authentication and authorization system, and bring small performance improvements at application runtime.
C# Hot Reload is now available in Blazor WebAssembly and .NET for Android and iOS. It also includes features like adding static lambdas to existing methods, adding new classes, adding new static or non-virtual instance methods to existing classes, adding lambdas that capture this to existing methods that already have at least one lambda that captures this, and adding new static fields to existing classes.
Migrating applications to .NET 6 wasn’t the easiest, but the new version brings upgrade enhancements and .NET Upgrade Assistant that will greatly help in this endeavor.
`System.Text.Json` now includes improvements like `JsonSerializerOptions`, `JsonWriter Options.MaxDepth` property and `Patch` methods in `System.Net.Http.Json`. Thanks to these additions, serialization, and deserialization of polymorphic type hierarchies are now possible.
Now with `CopyString` you can copy UTF-8 or even UTF-16 strings without decoding thanks to new methods that are able to consume decoded JSON strings.
In .NET 6, `AsyncLocal<T>` is used to achieve span context tracking of different threads. In .NET 7 you can use `Activity.CurrentChange` to receive notifications for value changes.
This feature resolves the problem of performance tests showing many allocations incurred when using enumeration interfaces. By using it, you can enumerate properties with quick access to the elements without extra allocations.
With .NET 7 you can now add microsecond and nanosecond values to the different time and date structures. Previously you had to determine their value based on the time increment called ‘tick’ (equals 100ns).
.NET 7 allows you to instantiate a single memory cache using the `AddMemoryCache` API. You can also get it injected in order to call `GetCurrentStatistics`.
Just like with the single memory cache, you can also instantiate multiple memory caches with `GetCurrentStatistics`.
Command lines are changing – commands in this output no longer need the - - prefix, but don’t worry, the old versions of the commands are still available.
The `dotnet` command line interface already supports tab completion on shells like PowerShell, bash, zsh, and fish. .NET 7 brought the `new` command a lot of functionalities:
Dynamic PGO was created by Microsoft to introduce changes from the Static PGO. What is different here is that Dynamic PGO doesn’t require any special tools for optimization.
With the 2022 .NET update, we got cross-platform APIs that can modify and extract `tar` archives.
On Stack Replacement works great with tiered compilation. This gives you the ability to change the code that is being executed while executing a method. OSR gives you an extra 25% of speed at startup, and the overall improvements can range from 10 to 30%.
It’s the main area that has been improved in .NET 7. Microsoft provides a 232 pages PDF document describing over 500 improvements. You can find all of them in the Microsoft Developers blog post. We’re going to focus only on a few.
It has always been a powerful tool to query all the metadata and call arbitrary functionality dynamically. Using reflection, you’re even able to emit dynamically generated methods at runtime.
One of the most impacted areas is reflection invoke. One of its use cases is creating a delegate from the `MethodBase` via `CreateDelegate<T>` and using that delegate for all future invocations. It’s a way to optimize invocation speed but only assuming you know the signature of the method in advance. In some cases, you don’t know the signature at compile time. To address this, reflection is being used to generate code at run-time. This is extremely expensive and complex to do. .NET 7 comes with improvements in that area. `Invoke` will use reflection emit by itself to generate a customized delegate for invoking the target method – and that has a lot of performance benefits.
Parsing regular expressions has got significant optimization in .NET 7. Improved strategies for string processing have paid off. Let’s see a couple of examples.
Following pattern `(@"[\w]+://[^/\s?#]+[^\s?#]+(?:\?[^\s#]*)?(?:#[^\s]*)?"` says about finding fragments which begin with a word character (`\w`), which includes ~50,000 of the ~65,000 possible characters.
For a pattern with anchors, like `^abc|^def`, the existing analysis had trouble seeing through that alternation to find the guaranteed starting `^` anchor. In .NET 7 it has been improved significantly.
Another example is also about character class matching but it can be found as a more real-world use case, like recognizing sets like `[\d\D]`, `[\s\S]` and `[\w\W]`, as meaning “match anything”.
Thanks to the new Regex Source Generator, you can limit the time spent on optimizing patterns up to 5x times. What’s more, it operates within a `partial` class so there’s no overhead of compiling time for instances.
We got a new analyzer that looks for the `Regex` uses with the possibility of conversion for the use of the `RegexGenerator` source generator. Microsoft says that the generator output depends on the known values of the parameters and requires LangVersion for preview.
Code fixer can now suggest `RegexGenerator` source generator methods and has the ability to override the names that come by default. Another function of this code fixer is to replace the original code through a call to the new method.
With Microsoft focusing mainly on performance improvements, it’s not a surprise that with .NET came reduced startup time (according to Microsoft, up to 10-15%). This can be achieved due to reducing the number of modifications after code creation at runtime.
Native AOT (Ahead-of-time) is one of the new improvements to .NET. AOT generates code at compile-time instead of run-time. This brings performance improvements in startup time, memory usage, disk size, and access to restricted platforms. It’s worth mentioning that .NET also offers `ReadyToRun` and `Nano AOT`, and AOT didn’t replace any of them.
One of the new features in EF Core 7 is that updating and deleting entities has been moved to the database side. That means it’s not being loaded to the memory at first before the action anymore. It has affected the performance a lot.
For gRPC to support multiplexing, HTTP/2 is required. However, a known issue in Kestrel’s implementation of HTTP/2 caused a bottleneck during the writing of responses over HTTP/2 when the connection was busy. The connection was made with thread locks in .NET 6, which caused lock contention.
In .NET 7 the bottleneck has been resolved by implementing a queue that notifies all other threads when a write has been completed. Therefore, the performance has been improved because there’s no need to fight over locks anymore.
Now it’s possible to expose tag enumerator methods. This is of great use in scenarios where performance matters the most. In .NET 7 object enumerations are performed with no loss of performance or speed.
Even though it might seem like a minor improvement, it still delivers performance enhancements. Microsoft eliminated the initialization conditions of the loop cloning variables, which allows a 21% performance increase.
If you want to experience .NET 7 for yourself, you might run into some issues while upgrading your current app. How to do it properly? Fortunately, there’s a highly customizable reverse proxy built on the .NET platform – YARP. It’s available as a NuGet package. YARP combined with Strangler Fig Pattern can be one of the simplest ways to migrate your app. You can find more info on that in this video.
To learn more about YARP, visit its website or GitHub repository.
As a development company, we have deep expertise in .NET as most of our products were built using the platform. We use .NET to develop small and large applications, as well as to scale the existing solutions.
Our development teams stay on track with the latest approaches to .NET programming, using SaaS and cloud services, and implementing AWS and Azure solutions.
We adore .NET for its maturity, security, and availability of various tools. Behind the platform stands a huge community, which is always there to provide support and help solve any development mysteries.
If you’re looking for a technology partner fluent in .NET technology, see how we work, and let us help you smoothly navigate your challenge today. Unlock the possibility for .NET technology solutions with our development experience.