LeadByExample(): Jakub Chodounsky über pragmatische Technik, die YOLO-Mentalität und warum beste Praktiken nicht immer die besten sind
Die vierte Vorschau von .NET 11 ist jetzt verfügbar und bringt mehrere Änderungen mit sich, die sowohl Bibliotheksautoren als auch Teams betreffen, die .NET-Dienste in der Produktion betreiben. Bei Iron Software pflegen wir ein Portfolio an .NET-Bibliotheken, was bedeutet, dass jede Vorschauveröffentlichung zwei Bewertungen auslöst: Was ändert sich für uns als Maintainer und was ändert sich für die Kunden, die diese Bibliotheken in ihre Anwendungen integrieren. Die folgenden Updates in Preview 4 halten wir für besonders wichtig.
Prozess-API: die bedeutendste Aktualisierung seit Jahren
System.Diagnostics.Process erhält sein erstes gründliches Update in mehreren Release-Zyklen und behebt genau die Schmerzpunkte, die Bibliotheksautoren seit Jahren umgangen haben. Dies ist direkt relevant für unsere Arbeit. IronPDF kapselt intern einen Chromium-Rendering-Prozess, was bedeutet, dass unser Team benutzerdefinierte Lösungen über denselben Bereich erstellt und gepflegt hat, den Microsoft jetzt standardisiert hat: Prozess-Spawn, deadlockfreies Ausgabe-Einfangen, plattformübergreifende Lebensdauerverwaltung und zuverlässiges Beendigungsverhalten.
Die neue API-Oberfläche liest sich wie ein Katalog von Problemen, die Bibliotheksteams seit Jahren umgehen:
// One-line execution with no deadlock risk
string output = await Process.RunAndCaptureTextAsync("git", ["log", "-5"]);
// Cross-platform parent-exit behavior
var psi = new ProcessStartInfo("renderer.exe")
{
KillOnParentExit = true,
};
// One-line execution with no deadlock risk
string output = await Process.RunAndCaptureTextAsync("git", ["log", "-5"]);
// Cross-platform parent-exit behavior
var psi = new ProcessStartInfo("renderer.exe")
{
KillOnParentExit = true,
};
Imports System.Diagnostics
Imports System.Threading.Tasks
' One-line execution with no deadlock risk
Dim output As String = Await Process.RunAndCaptureTextAsync("git", {"log", "-5"})
' Cross-platform parent-exit behavior
Dim psi As New ProcessStartInfo("renderer.exe") With {
.KillOnParentExit = True
}
RunAndCaptureTextAsync multiplexiert stdout und stderr, um Pipe-Buffer-Deadlocks zu beseitigen. KillOnParentExit und StartDetached bieten plattformübergreifende Kontrolle über die Lebensdauer von Kindprozessen unter Windows und Linux. InheritedHandles ermöglicht die explizite Angabe, welche Handles ein Kindprozess erbt und ersetzt die historische Standardeinstellung der breiten Vererbung. Die leichte SafeProcessHandle-Oberfläche produziert NativeAOT-Binärdateien, die bis zu 20% kleiner sind als die Standard-API.
Für jedes Team, das .NET-Software entwickelt, die Kindprozesse orchestriert, verdient dieser Abschnitt der Release-Notizen eine sorgfältige Überprüfung.
Für Teams, die diese Infrastruktur lieber nicht im eigenen Haus aufbauen und pflegen möchten, bietet IronPDF out-of-the-box produktionsgeprüfte Implementierungen dieser Muster: deadlockfreies Ausgabe-Einfangen, Lebensdauersteuerung und zuverlässige Fehlerbehandlung. Starten Sie eine kostenlose Testversion der Iron Suite, keine Kreditkarte erforderlich.
Span-based Deflate, ZLib, and GZip APIs
Diese Änderung ist in den Release-Notes weniger prominent, verbessert jedoch materiell jede Arbeitslast, die komprimierte Daten verarbeitet. PDF-Dokumente enthalten komprimierte Inhalt-Streams. XLSX-Dateien sind ZIP-Archive komprimierter XML. DOCX folgt demselben Muster. Die neuen span-basierten Encoder- und Decoder-APIs reduzieren Zuweisungen genau bei den Vorgängen, die Bibliotheken wie IronPDF und IronXL kontinuierlich durchführen.
Dies sind Infrastruktur-Verbesserungen, die selten Schlagzeilen in den Veröffentlichungen machen, aber die Kosten jedes durch das Framework verarbeiteten Bytes reduzieren.
Runtime Async, jetzt in die Framework-Bibliotheken kompiliert
Vorschau 3 entfernte die Vorschau-Funktionensperre bei Runtime Async. Vorschau 4 erweitert dies noch weiter: Die Laufzeitbibliotheken selbst (die gesamte BCL, einschließlich System.IO und System.Net.Http) werden jetzt mit runtime-async kompiliert. Jeder asynchrone Aufruf in die Framework-Bibliotheken verwendet jetzt die neue Fortsetzungsmachinerie, unabhängig davon, ob der konsumierende Code die Funktion aktiviert hat oder nicht.
Für Bibliotheken, die umfangreiche I/O-Leistungen erbringen (Dateien lesen, entfernte Assets herunterladen, Bytes durch Codecs streamen), stellt dies eine bedeutende Verbesserung der Abhängigkeitsleistung dar, ohne dass Änderungen auf der Verbraucher-Seite erforderlich sind. Andy Gocke vom Laufzeitteam hat bestätigt, dass handaktivierte DecompressAsync bei Unterstützung durch einen MemoryStream null zusätzliche Zuweisungen produziert. Microsoft hat noch keine offiziellen Benchmark-Zahlen veröffentlicht und verweist auf die Notwendigkeit, das vollständige Leistungstests-Set abzuschließen, aber die strukturelle Änderung ist eingeführt.
MAUI wechselt zu CoreCLR
Dies ist die signifikanteste architektonische Änderung in der Veröffentlichung, obwohl die direkte Auswirkung auf unsere Produktlinie begrenzt ist. Ab Vorschau 4 laufen MAUI-Anwendungen auf Android, iOS und Mac Catalyst standardmäßig auf CoreCLR, was mehr als fünfzehn Jahre Mono als mobile Laufzeit for .NET beendet. Die gleiche Laufzeit betreibt nun ASP.NET Core, Desktop-Anwendungen und Mobilgeräte. dotnet watch ist jetzt auch für Android und iOS verfügbar, was eine der am häufigsten genannten Lücken in der MAUI-Entwicklererfahrung seit seiner ersten Veröffentlichung schließt.
Für Teams, die IronBarcode oder IronPDF in einer MAUI-Anwendung verwenden, ist die zugrunde liegende Laufzeit nun mit dem Rest des .NET-Stacks vereinheitlicht.
Bekannte Einschränkungen und Überlegungen
- Visual Studio-Unterstützung bleibt auf den Insiders-Kanal beschränkt. Teams mit stabilen Visual Studio-Versionen integrieren .NET 11 noch nicht in die Mainline-Entwicklung.
- Runtime Async ist strukturell gelandet, aber es fehlen offizielle Benchmarks. Die weit verbreitete Zahl von "10M awaits: 80ms bis 32ms, 687MB bis 94KB" stammt aus einem Community-Gist, nicht von Microsoft.
- Der Übergang zu MAUI CoreCLR ist eine Laufzeitveränderung, die als Standard ausgeliefert wird. Bestehende MAUI-Anwendungen sollten auf physischen Geräten getestet werden, anstatt ein transparentes Upgrade anzunehmen.
- Wie bei jeder Vorschau sollte die Produktionsbereitstellung mindestens bis zum ersten Release-Kandidaten warten.
Zusammenfassung
Vorschau 4 repräsentiert die stärkste Serie von Änderungen im .NET 11-Zyklus bisher. Die Umschreibung der Prozess-API ist das bedeutsamste Update für Teams, die .NET-Software entwickeln oder betreiben, die Kindprozesse startet. Die Komprimierungs- und Runtime Async-Verbesserungen erhöhen sich bei I/O-intensiven Arbeitslasten. Die MAUI-Laufzeit-Geschichte ist jetzt konsistent mit dem Rest der Plattform.
Unser Team verfolgt jede Vorschau aktiv und bereitet unsere Bibliotheken auf die Kompatibilität am ersten Tag vor, wenn .NET 11 im November die allgemeine Verfügbarkeit erreicht.