.NET 7.0 – what’s new

15.03.2023

Seit dem 8. November 2022 steht uns das neue und anscheinend schnellste .NET 7 (und damit verbundenen Verbesserung und Updates in ASP.NET Core, Blazor, C#11 und Windows Forms) zur Verfügung.

Das Hauptanliegen von .NET ist, eine Plattform zu etablieren, die die Erstellung von verschiedenen Formen von Anwendungen ermöglicht. Mit .Net 7 ist man diesem Schritt, durch die verbesserte ARM64 Unterstützung und den erweiterten .Net Support für Linux, einen Schritt näher gekommen. Speziell bei der Entwicklung von .Net 7 standen die Themen Vereinfachung, Modernisierung, Cloud-native Anwendungen und Schnelligkeit im Fokus. Microsoft bietet wie gehabt einen STS (Standard-Term Support) von 18 Monate für das Framework an. Im folgenden schauen wir uns einige der interessantesten Features näher an.

Performance

Wie eingangs bereits erwähnt, wurde in .NET 7 stark auf die Leistungsverbesserung geachtet. Dafür wurden mehrere Anpassungen und auch neue Features eingebunden. Die wichtigsten drei haben wir hier zusammengefasst:

  1. On-stack replacement (OSR) ist eine Ergänzung zur Tiered compilation (.NET Core 3). Sie ermöglicht es der Laufzeitumgebung – inmitten der Ausführung – zwischen verschiedenen Implementierungen derselben Funktion zu wechseln. Methoden mit langer Ausführungsdauer können nun- während der Laufzeit – den Wechsel zu optimierten Versionen durchführen.
  2. Die Profilgesteuerte Optimierung (Profile Guided Optimization, PGO) funktioniert inzwischen auch mit On Stack Replacement (OSR).
  3. Neu ist auch die Native AOT (ahead-of-time) in .Net 7. Dieses Feature ermöglicht die Generierung einer eigenständig ausführbaren Datei im Dateiformat der Zielplattform ohne externe Abhängigkeiten. Native AOT Apps starten sehr schnell und verbrauchen wenig Speicher. Die Applikation kann außerdem unabhängig von der .NET Laufzeitumgebung ausgeführt werden. Aufgepasst: derzeit ist dieses Feature nur für Konsolenanwendungen und DLLs konzipiert.

Einen ausführlichen Artikel zur Leistungsverbesserung innerhalb .NET 7 kann hier gefunden werden.

Signifikante Änderungen /Neuheiten:

Neben wichtigen Veränderung in den .NET-Bibliotheks-APIs wurden auch einige neue Features eingearbeitet.

Generische Mathematik mit INumber<T>

Es ist inzwischen möglich mathematische Operationen mit einer generischen Methode durchführen, wobei der Typ-Parameter zwingend ein Zahlen ähnlicher Typ sein muss. Eine Überladung der Methode, für jeden Typ, ist nicht mehr nötig.

static T Add<T>(T left, T right)
    where T : INumber<T>
{
    return left + right;
}

Regex Source Code Generator

Es gibt nun auch einen Quellgenerator für Reguläre Ausdrücke. Quellgeneratoren erstellen eine Engine, die zur Kompilierzeit für ein bestimmtes Muster optimiert ist. Die ausgegebene Quelle ist Teil des Projekts und kann angezeigt und debugged werden. Mittels Quellgenerator Diagnose wird auf Regex Abschnitte hingewiesen, für die der Quellgenerator eingesetzt werden kann.

[GeneratedRegex("abc|def", RegexOptions.IgnoreCase, "en-US")]
private static partial Regex AbcOrDefGeneratedRegex();
 
private static void EvaluateText(string text)
{
    if (AbcOrDefGeneratedRegex().IsMatch(text))
    {
        // Take action with matching text
    }
}
//Quelle: https://learn.microsoft.com/de-de/dotnet/standard/base-types/regular-expression-source-generators

Json-Serialisierung

Einige Verbesserungen durften die System.Json.Text-Serialisierung erfahren. Zum einen ermöglichen die Vertragsanpassungen eine verbessere Kontrolle über die Serialisierung und Deserialisierung von Typen.  Zum anderen ist mit dem System.Text.Json-Namespace nun auch die polymorphe Typhierarchie-Serialisierung und Deserialisierung möglich.  Ein kleines Beispiel dazu kann im folgenden Codeabschnitt gefunden werden.

[JsonDerivedType(typeof(Person), typeDiscriminator: "P")]
[JsonDerivedType(typeof(Informatiker), typeDiscriminator: "Informatiker")]
 
public class Person {
    public string Name { get; set; }
}
public class Informatiker: Person {
    public string Unternehmen{ get; set; }
}
//Serialisierung
Person value = new Informatiker() { Name="Max Mustermann", Unternehmen="https://www.doubleslash.de/" };
    var json = JsonSerializer.Serialize<Person>(value);
    Console.WriteLine(json);;
    // -> {"$type":"IN","Informatiker":"https://www.doubleslash.de/","Name":"Max Mustermann"}
 
//Deserialisierung
Person? p2 = JsonSerializer.Deserialize<Person>(json);
Console.WriteLine(p2); // -> Unternehmen

Der Json Type Info Resolver  kann wiederum verwendet werden, um den JSON-Serialisierungsvertrag für angeforderte Typen zu beheben.

Mikrosekunden und Nanosekunden

Mikrosekunden und Nanosekunden werden nun in den Typen TimeSpan, TimeOnly, DateTime und DateTimeOffset unterstützt. So können die Neuerungen verwendet werden.

TimeSpan ts = ende - start;
Console.WriteLine(ts.TotalMicroseconds + " μs");
Console.WriteLine(ts.TotalNanoseconds + " ns");

Tar Archive

Um die immer weiter verbreiteten tar-Archive zu Lesen, Schreiben, Archivieren und Extrahieren kann nun die API System.Formats.Tar verwendet werden.

Fazit

Mit .Net 7 wurden einige Bereiche weiter ausgearbeitet und nachgerüstet, die nicht nur den Kern betreffen. Mit der neuen Version kommt Microsoft dem erklärten Ziel leichtgewichtig, plattformneutral, cloud-native und Containeroptimiert zu sein wieder einen Schritt näher. Im Bereich Performance liefert die neue Version wieder weitere Verbesserungen aber auch etablierte Framework Komponenten wie das Entity Framework (Core 7 (EF7), Windows Presentation Foundation (WPF), .NET MAUI , .ML .NET oder F#7 machen .NET7 zu einer interessanten Entwickler-Platform.  Mit dem Upgrade Assistant pushed Microsoft die Ablösung alter .NET Framework Versionen weiter und bietet einen einfachen Umstieg.


Co-Autor: Sarah Marie Raible

Quellen: 

https://www.dotnet-doktor.de/DOTNETDOKTOR/Listen/Blog.aspx

https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-7

https://medium.com/codex/the-15-most-important-new-features-in-net-7-preview-5-2cfb2b8d8245

https://entwickler.de/dotnet/dotnet-11-csharp-7

https://devblogs.microsoft.com/dotnet/announcing-dotnet-7/

 https://dotnet.microsoft.com/en-us/platform/upgrade-assistant

 

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*