LeadByExample() : Jakub Chodounsky sur l'ingénierie pragmatique, l'état d'esprit YOLO et pourquoi les meilleures pratiques ne sont pas toujours les meilleures
La quatrième prévisualisation de .NET 11 est maintenant disponible, et elle apporte plusieurs changements qui affectent matériellement à la fois les auteurs de bibliothèques et les équipes exploitant des services .NET en production. Chez Iron Software, nous maintenons un portefeuille de bibliothèques .NET, ce qui signifie que chaque version de prévisualisation entraîne deux évaluations : ce qui change pour nous en tant que mainteneurs, et ce qui change pour les clients intégrant ces bibliothèques dans leurs applications. Les mises à jour suivantes dans la Preview 4 que nous considérons comme les plus importantes.
Process API : la mise à jour la plus significative depuis des années
System.Diagnostics.Process reçoit sa première mise à jour substantielle en plusieurs cycles de version, et elle traite précisément les douleurs que les auteurs de bibliothèques contournent depuis des années. C'est directement pertinent pour notre travail. IronPDF encapsule un processus de rendu Chromium en interne, ce qui signifie que notre équipe a construit et maintenu des solutions personnalisées sur le même espace où Microsoft a maintenant standardisé : création de processus, capture de sortie sans blocage, gestion de durée de vie multiplateforme et comportement de terminaison fiable.
La nouvelle surface API ressemble à un catalogue d'issues que les équipes de bibliothèques contournent depuis des années :
// 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 multiplexe stdout et stderr pour éliminer les blocages tampon de tuyaux. KillOnParentExit et StartDetached fournissent un contrôle multiplateforme sur la durée de vie des processus enfants sur Windows et Linux. InheritedHandles permet la spécification explicite des poignées qu'un processus enfant hérite, remplaçant le défaut historique de large héritage. La surface légère SafeProcessHandle produit des binaires NativeAOT jusqu'à 20% plus petits que l'API standard.
Pour toute équipe construisant un logiciel .NET orchestrant des processus enfants, cette section des notes de version mérite un examen attentif.
Pour les équipes qui préfèrent ne pas construire et maintenir cette infrastructure en interne, IronPDF fournit des implémentations testées en production de ces modèles prêts à l'emploi : capture de sortie sans blocage, contrôle de la durée de vie, et gestion fiable des erreurs. Commencez un essai gratuit de l'Iron Suite, pas besoin de carte de crédit.
API basées sur Span pour Deflate, ZLib et GZip
Ce changement est moins visible dans les notes de version mais améliore matériellement toute charge de travail traitant des données compressées. Les documents PDF contiennent des flux de contenu compressé. Les fichiers XLSX sont des archives ZIP de XML compressé. DOCX suit le même schéma. Les nouvelles APIs d'encodage et de décodage basées sur span réduisent les allocations précisément à travers les opérations que des bibliothèques comme IronPDF et IronXL exécutent continuellement.
Ce sont des améliorations au niveau de l'infrastructure qui ne font que rarement les gros titres des versions mais réduisent le coût de chaque octet traité à travers le cadre.
Async Runtime, maintenant compilé dans les bibliothèques du framework
Preview 3 a supprimé la porte de fonctionnalité en prévisualisation sur Async Runtime. Preview 4 étend cela plus loin : les bibliothèques runtime elles-mêmes (l'ensemble du BCL, y compris System.IO et System.Net.Http) sont maintenant compilées avec async-runtime. Chaque appel asynchrone dans le cadre utilise maintenant le nouveau mécanisme de continuation, peu importe si le code consommateur a activé la fonctionnalité.
Pour les bibliothèques qui effectuent des entrées/sorties substantielles (lecture de fichiers, téléchargement de ressources distantes, streaming d'octets à travers des codecs), cela représente une amélioration significative des performances de dépendance sans nécessiter de changements côté consommateur. Andy Gocke de l'équipe runtime a confirmé que DecompressAsync activé à la main ne produit aucune allocation supplémentaire lorsqu'il est soutenu par un MemoryStream. Microsoft n'a pas encore publié de chiffres officiels de benchmark, invoquant le besoin de compléter sa suite complète de tests de performance, mais le changement structurel est en place.
MAUI passe à CoreCLR
C'est le changement architectural le plus significatif de la version, bien que l'impact direct sur notre gamme de produits soit limité. À partir de Preview 4, les applications MAUI sur Android, iOS et Mac Catalyst fonctionnent par défaut sur CoreCLR, concluant plus de quinze ans de Mono comme runtime mobile pour .NET. Le même runtime alimente maintenant ASP.NET Core, les applications de bureau et mobiles. dotnet watch est également maintenant disponible pour Android et iOS, traitant l'un des écarts les plus fréquemment cités dans l'expérience développeur MAUI depuis sa sortie initiale.
Pour les équipes utilisant IronBarcode ou IronPDF dans une application MAUI, l'exécution sous-jacente est désormais unifiée avec le reste de la pile .NET.
Limitations et considérations connues
- Le support Visual Studio reste limité au canal Insiders. Les équipes sur des versions stables de Visual Studio n'intègrent pas encore .NET 11 dans le développement principal.
- Async Runtime est atterri structurellement mais manque de benchmarks officiels. Le chiffre largement circulé de "10M awaits: 80ms to 32ms, 687MB to 94KB" provient d'une vue communautaire plutôt que Microsoft.
- La transition MAUI CoreCLR est un changement de runtime expédié comme un défaut. Les applications MAUI existantes doivent être testées sur des dispositifs physiques plutôt que supposées un passage transparent.
- Comme pour toute prévisualisation, le déploiement en production devrait attendre au moins le premier candidat de version.
Résumé
Preview 4 représente l'ensemble le plus fort de changements dans le cycle .NET 11 à ce jour. La réécriture de Process API est la mise à jour la plus conséquente pour les équipes construisant ou opérant des logiciels .NET qui lancent des processus enfants. Les améliorations de la compression et d'Async Runtime composent à travers des charges de travail intensives d'E/S. L'histoire du runtime MAUI est maintenant cohérente avec le reste de la plateforme.
Notre équipe suit activement chaque prévisualisation et prépare nos bibliothèques pour la compatibilité dès le premier jour lorsque .NET 11 atteindra la disponibilité générale en novembre.