.NET 7 Preview 3 hat Startzeit der Anwendungen im Fokus

Die Vorabkompilierung über Native AOT nimmt weiter Gestalt an, und die Preview verbessert die Startzeiten im Write-Xor-Execute-Betrieb.

In Pocket speichern vorlesen Druckansicht

(Bild: StockStudio/Shutterstock.com)

Lesezeit: 5 Min.
Inhaltsverzeichnis

Einen Monat nach der zweiten Vorschauversion von .NET 7 hat Microsoft die Preview 3 veröffentlicht. Im Mittelpunkt stehen die Startzeiten von Anwendungen durch den neuen Ahead-of-Time-Compiler (AOT) und Verbesserungen für den Betrieb unter dem Sicherheitsmechanismus Write-Xor-Execute. Wie üblich ist parallel die dritte Preview von Entity Framework Core 7 erschienen, die mehr Flexibilität beim Generieren von DBContext-Klassen bringt.

.NET setzt traditionell auf Managed Code, den ein Just-in-Time-Compiler zur Laufzeit in Maschinencode übersetzt. Microsoft arbeitet seit einigen Jahren an einer Alternative mit AOT-Kompilierung, um den Code bereits im Vorfeld zu übersetzen und damit vor allem die Startzeiten von Anwendungen zu verbessern.

Bereits im Zuge der Veröffentlichung von .NET 7 Preview 2 hat das Projekt Native AOT, das ursprünglich als CoreRT gestartet war, den experimentellen Status verlassen. Zum aktuellen Release bringt Microsoft weitere Informationen zum Status und Einsatz des Projekts in .NET 7.

Im Gegensatz zum bisherigen AOT-Ansatz mit der ReadyToRun-Kompilierung, die Teile des Codes in Maschinencode übersetzt, aber für nicht vorkompilierte Artefakte weiterhin JIT verwendet, setzt Native AOT auf vollständig für die jeweilige Zielplattform kompilierte Binaries. Neben der verbesserten Startzeit ist damit üblicherweise ein geringerer Speicherbedarf verbunden. Außerdem lässt sich Code auf Plattformen wie iOS ausführen, für die keine JIT-Implementierung zu .NET existiert.

Der Preis dafür ist, dass einige Features vor allem für flexibles Code-Handling nicht zur Verfügung stehen. Unter anderem können Anwendungen zur Laufzeit keine .NET-Assemblies laden und keinen Code über Funktionen wie System.Reflection.Emit erstellen. Außerdem müssen native Binaries für alle Zielplattformen zur Verfügung stehen.

Für .NET 7 ist Native AOT vor allem für native Libraries und Konsolenanwendungen geplant. Microsoft hat die Anleitungen für die Vorbereitung aktualisiert und auf Deutsch bereitgestellt. Neben dem Leitfaden zum Trimmen von Anwendungen und Libraries gibt es eine speziell auf Libraries zugeschnittene Dokumentation. Im GitHub-Repository findet sich zudem eine Anleitung zum Erstellen nativer Libraries mit Native AOT.

Getreu dem Motto "Eat your own dog food" soll .NET 7 das Tool Crossgen, das Teil des .NET-SDK ist, als Native-AOT-Anwendung mitbringen. Es erstellte native Images und ist derzeit als Ready-to-Run-Anwendung verfügbar. Microsoft hat in der Ankündigung zur dritten Vorschauversion Benchmarks zum Kompilieren mit Crossgen veröffentlicht. Das Übersetzen der CoreLib hat demnach mit Native AOT 3512 Millisekunden statt 4182 Millisekunden mit Ready to Run benötigt. Für ein einfaches Hello-World-Programm reduziert sich die Zeit sogar auf weniger als ein Drittel von 185 auf 49 Millisekunden. Da Native AOT vor allem die Startzeit reduziert, profitieren kürzere Prozesse stärker als längere.

Eine weitere Neuerung hat die Startzeiten speziell für den Write-Xor-Execute-Modus (W^X) im Blick. Die zuerst in OpenBSD zum Schutz des Speicherzugriffs eingeführte Technik legt fest, dass Speicherbereiche nur entweder beschreibbar oder ausführbar sein dürfen, aber nicht beides. Das Vorgehen verhindert, dass Schadsoftware CPU-Instruktionen in den Speicher schreibt und anschließend aufruft. Die aktuelle Preview von .NET 7 implementiert eine Änderung, die laut dem Microsoft-Blog die Startzeit im W^X-Modus um 10 bis 15 Prozent reduziert. Derzeit gibt es wohl noch einige Regressionen, die sich ohne W^X zeigen, aber in den nächsten Releases behoben werden sollen.

Daneben bringt die .NET 7 Preview 3 Ergänzungen zur Observability nach der OpenTelemetry-Spezifikation sowie einige Optimierungen und Bugfixes für das Generieren von Code und die Just-in-Time-Kompilierung.

Die dritte Preview von Entity Framework Core 7 erweitert das Reverse Engineering von Klassen für Datenbankanwendungen über T4-Vorlagen (Text Template Transformation Toolkit). Damit lassen sich nun DbContext- und Entity-Klassen individuell gestalten und beispielsweise Initialisierungen für Properties oder den Konstruktor definieren.

Um das Vorgehen zu testen, müssen Entwicklerinnen und Entwickler das Paket Microsoft.EntityFrameworkCore.Design in ihr Projekt einbinden und das Tool dotnet-ef installieren. Anschließend verwendet Entity Framework 7 T4-Vorlagen mit den Dateinamen DbContext.t4 und EntityType.t4 im Ordner CodeTemplates.

Neben der individuellen Gestaltung für Klassen bietet die Neuerung auch eine Methode zum Erstellen von Entity-Relationship-Diagrammen über das Tool Mermaid wie in folgendem Beispiel aus dem .NET-Blog:

```mermaid
erDiagram
    ORDERMASTER ||--o{ ORDERDETAIL : owns
    ORDERDETAIL ||--|{ LINE-ITEM : contains
    ORDERMASTER }|..|{ CUSTOMER : uses
```

das folgendes Diagramm definiert:

Mermaid erstellt aus der Definition das Entity-Relationship-Diagramm.

(Bild: Microsoft)

Ein Video auf der Plattform .NET Data Community Standup zeigt das detaillierte Vorgehen inklusive der Grundlagen zu T4 Templates.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

Daneben gibt es einige Ergänzungen für die Update-Pipeline wie eine RETURNING- beziehungsweise OUTPUT-Klausel für UPDATE und DELETE.

Weitere Details lassen sich den Blogbeiträgen zu der .NET 7 Preview 3 und der dritten Vorschauversion von Entity Framework Core 7 entnehmen. Daneben ist die Preview 3 von ASP.NET Core 7 erschienen, die unter anderem Filter in Route Handlers einführt.

(rme)