Home / Blog

.NET 9 vs .NET 8: wat is er nieuw en waarom upgraden

Carlos Casalicchio · June 9, 2026 ·6 min leestijd

Het releasetempo van .NET blijft versnellen

Microsoft bracht .NET 9 uit in november 2024 als een Standard Term Support (STS)-release, en het tempo van verbetering vertoont geen tekenen van vertraging. Met meer dan 7.500 pull requests die alleen al in de dotnet/runtime-repository zijn samengevoegd, is .NET 9 de snelste en meest capabele release van het platform tot nu toe.

Maar "snelste" is abstract. Als ontwikkelaars moeten we weten: wat is er daadwerkelijk veranderd, wat maakt onze code beter, en is de upgrade het waard?

Deze gids ontleedt elke betekenisvolle verbetering van .NET 8 naar .NET 9 — van C# 13-taalfuncties tot runtime-prestatiewinst, AI-integratie en ASP.NET Core-verbeteringen — zodat u een weloverwogen beslissing kunt nemen voor uw team.

C# 13: taalfuncties die u daadwerkelijk gaat gebruiken

C# 13 wordt geleverd met de .NET 9 SDK en introduceert verschillende functies die boilerplate verminderen en de veiligheid verbeteren:

params-collecties

Voorheen was params beperkt tot arrays. C# 13 breidt de ondersteuning voor params uit naar elk collectietype dat IEnumerable<T> implementeert en een Add-methode heeft — waaronder List<T>, Span<T> en ReadOnlySpan<T>. Dit elimineert onnodige array-allocaties bij het aanroepen van methoden met variabele argumenten.

Nieuw Lock-type en nieuwe semantiek

Het type System.Threading.Lock vervangt het traditionele patroon lock (obj) { } door een speciaal type dat de compiler herkent. Het nieuwe sleutelwoord lock werkt met Lock-objecten om efficiëntere code te produceren met verbeterde debug-ondersteuning.

ref struct-interfaces

ref struct-types kunnen nu interfaces implementeren en worden gebruikt als typeargumenten in generics. Dit ontsluit patronen zoals hoogperformante span-gebaseerde abstracties die voorheen onmogelijk waren vanwege typebeperkingen.

Partiële eigenschappen en indexers

Partiële eigenschappen en indexers zijn nu toegestaan in partiële types, waardoor source generators expressiever worden. Bibliotheekauteurs kunnen partiële eigenschappen declareren in gegenereerde code, terwijl de implementaties in gebruikerscode leven — een patroon dat door source generators aangestuurde architecturen drastisch vereenvoudigt.

Prioriteit bij overload-resolutie

Bibliotheekauteurs kunnen nu één overload als beter dan andere aanmerken met het attribuut [OverloadResolutionPriority]. Dit elimineert compilerfouten door dubbelzinnige aanroepen wanneer nieuwe overloads worden toegevoegd aan bestaande API's zonder consumenten te breken.

Impliciete indexer-toegang in objectinitialisatoren

U kunt nu de operator ^ (indexeren vanaf het einde) gebruiken in objectinitialisatoren, waardoor het initialiseren van collecties expressiever wordt wanneer u vanaf het einde van een reeks vult.

Runtime-prestaties: elke cyclus telt

Het prestatieverhaal van .NET 9 is gebouwd op honderden gerichte verbeteringen die zich opstapelen in echte applicaties. Hier zijn de hoogtepunten:

Dynamic PGO: optimaliseert nu casts en branches

Dynamic Profile-Guided Optimization (PGO) — geïntroduceerd in .NET 8 — reikt nu verder dan virtuele dispatch en omvat ook cast-optimalisaties. De JIT houdt de meest voorkomende types bij die tijdens obj is T- en (T)obj-bewerkingen worden aangetroffen en genereert vervolgens snelle paden voor die types. In micro-benchmarks draaien typecontrole-bewerkingen tot 4x sneller op veelvoorkomende paden.

Lus-optimalisaties: strength reduction en aftellen

De JIT voert nu strength reduction uit op array-iteratielussen, waarbij op index gebaseerde toegang wordt omgezet in pointer-rekenkunde. In combinatie met automatisch aftellen (waarbij cmp + jl wordt vervangen door één jns) verliezen strakke lussen één instructie per iteratie. Voor hot-path-lussen over grote collecties telt dit snel op.

Eliminatie van bounds checks: slimmer dan ooit

De bounds-check-analyse van de JIT verwerkt nu patronen die voorheen werden gemist — omgekeerd indexeren, complexe lusvoorwaarden en span-gebaseerde toegangen die interacteren met eerdere lengtecontroles. Minder bounds checks betekent strakkere lussen en minder branches die verkeerd voorspeld kunnen worden.

Garbage collection: dynamische aanpassing

Server-GC bevat nu dynamische aanpassing aan de applicatiegrootte, standaard ingeschakeld. De GC past zijn gedrag aan op basis van de werkelijke geheugenpatronen van de applicatie in plaats van vaste heuristieken, waardoor pauzetijden voor geheugenintensieve workloads worden verkort zonder de doorvoer op te offeren.

Vectorisatie en Arm64

De codegeneratie voor Arm64 kreeg aanzienlijke aandacht, met uitgebreide SIMD-vectorisatie en beter gebruik van Arm-specifieke instructies. Voor cloud-workloads die draaien op Graviton- of Ampere-processoren vertaalt dit zich direct in lagere rekenkosten.

ASP.NET Core 9: standaard veilig, ontworpen voor snelheid

ASP.NET Core 9 maakt beveiligingsverbeteringen automatisch en verlegt tegelijkertijd het prestatieplafond verder omhoog:

Ingebouwde generatie van OpenAPI-documenten

Het nieuwe pakket Microsoft.AspNetCore.OpenApi biedt ingebouwde generatie van OpenAPI-documenten zonder dat Swashbuckle of NSwag nodig is. Metadata van minimal API's, controllers en type-annotaties wordt automatisch weerspiegeld in de gegenereerde OpenAPI-specificaties — waardoor afhankelijkheidsverloop afneemt en de compatibiliteit verbetert.

Fingerprinting van statische assets

De optimalisatie tijdens build en publish van statische bestanden (JavaScript, CSS) omvat nu automatische, van fingerprints voorziene versionering. Cache-busting wordt automatisch, waardoor een veelvoorkomende bron van bugs door verouderde assets wordt geëlimineerd.

Blazor-verbeteringen

Nieuwe Hybrid- en Web App-templates vereenvoudigen het opzetten van projecten. Detectie van de rendermodus van componenten verbetert het debuggen. De herverbindingservaring voor Blazor Server is opnieuw ontworpen en biedt gebruikers een soepelere ervaring wanneer netwerkverbindingen wegvallen.

Uitbreiding van Native AOT

De ondersteuning voor ahead-of-time-compilatie in ASP.NET Core is uitgebreid, wat de latentie bij koude start en de geheugenvoetafdruk verkleint. Voor gecontaineriseerde microservices betekent Native AOT kleinere images en snellere scale-out-gebeurtenissen.

HTTPS-ontwikkelcertificaat op Linux

Het opzetten van een vertrouwd ontwikkelcertificaat op Linux voor HTTPS tijdens de ontwikkeling is nu aanzienlijk eenvoudiger — een verbetering van de gebruikservaring voor teams die op Linux-werkstations ontwikkelen.

AI-bouwstenen: .NET wordt native met AI

.NET 9 introduceert een uniforme AI-abstractielaag en positioneert .NET als een eersteklas platform voor AI-aangedreven applicaties:

Microsoft.Extensions.AI

Een set C#-abstracties voor interactie met AI-diensten — kleine en grote taalmodellen (SLM's en LLM's), embeddings en vector stores. Deze pakketten bieden een consistent programmeermodel, of u nu OpenAI, Azure OpenAI of lokale modellen via ONNX Runtime aanroept.

Tensor<T> en TensorPrimitives

Het nieuwe type Tensor<T> biedt efficiënte manipulatie van multidimensionale data met zero-copy-interop met ML.NET, TorchSharp en ONNX Runtime. TensorPrimitives is uitgebreid van 40 naar bijna 200 SIMD-geoptimaliseerde bewerkingen — die de numerieke primitieven omvatten die nodig zijn voor inferentie en feature-engineering.

ML.NET 4.0

ML.NET 4.0 brengt het laden van ONNX-modellen als Stream, nieuwe tokenizer-ondersteuning voor GPT-, Llama-, Phi- en Bert-modellen, en experimentele TorchSharp-ports van de Llama- en Phi-modelfamilies. Als u .NET-applicaties bouwt die on-device of in-process AI-inferentie nodig hebben, is dit de release die dat praktisch maakt.

Tokenizers-bibliotheek

De bibliotheek Microsoft.ML.Tokenizers ondersteunt nu standaard Tiktoken (GPT-3/4/4o/o1), Llama, CodeGen, Phi2 en Bert-tokenizers. Dit is essentieel voor het beheren van contextvensters, het berekenen van tokenkosten en het voorbewerken van tekst voor lokale modellen.

EF Core 9: Cosmos DB en voorgecompileerde query's

Entity Framework Core 9 richt zich op twee gebieden: diepere integratie met Azure Cosmos DB voor NoSQL en het leggen van de basis voor ahead-of-time-compilatie:

  • Cosmos DB-provider: Aanzienlijke updates voor de NoSQL-provider, waaronder verbeterde LINQ-vertaling, ondersteuning voor hiërarchische partitiesleutels en beter beheer van de doorvoer.
  • Voorgecompileerde query's: Stappen richting AOT-gecompileerde query's die de overhead van runtime-querycompilatie elimineren — cruciaal voor de prestaties bij koude start in serverless en gecontaineriseerde omgevingen.
  • Verbeteringen voor complexe types: Betere verwerking van owned entities en value objects, waardoor de boilerplate die nodig is voor rijke domeinmodellen wordt verminderd.

.NET MAUI: prestaties en desktopintegratie

.NET MAUI in .NET 9 geeft prioriteit aan prestaties en desktopmogelijkheden:

  • CollectionView en CarouselView kregen nieuwe, performantere implementaties op iOS en Mac Catalyst.
  • HybridWebView maakt het eenvoudiger om React-, Vue.js- of Angular-content in te bedden in MAUI-apps.
  • TitleBar-besturingselement voor Windows-desktopapplicaties, dat native aanpassing van de titelbalk biedt.
  • Native AOT- en Trimming-verbeteringen verkleinen de app-grootte en opstarttijd op mobiel.

.NET 8 vs .NET 9: vergelijking naast elkaar

Categorie .NET 8 .NET 9
Releasetype LTS (3 jaar ondersteuning) STS (2 jaar ondersteuning)
C#-versie C# 12 C# 13
Dynamic PGO Virtuele/interface-dispatch Voegt casts, branches, integer-profiling toe
AI-abstracties Geen (alleen NuGet-pakketten) Microsoft.Extensions.AI, Tensor<T>
OpenAPI Van derden (Swashbuckle) Ingebouwd Microsoft.AspNetCore.OpenApi
GC-modus Vaste server/workstation Dynamische aanpassing aan app-grootte
ref struct Kan geen interfaces implementeren Kan interfaces implementeren, gebruikt als generic-argument
Lus-optimalisaties Basale lusherkenning Strength reduction, aftellen
LINQ Standaardoperatoren Voegt CountBy, AggregateBy toe
Native AOT Beperkte ASP.NET-ondersteuning Uitgebreide ASP.NET-ondersteuning

Moet u upgraden?

Upgrade direct als:

  • U prestatiegevoelige workloads draait en kunt profiteren van de JIT-, GC- en lus-optimalisaties.
  • U AI-aangedreven functies bouwt — de nieuwe Microsoft.Extensions.AI-abstracties en tokenizer-ondersteuning zijn de migratie alleen al waard.
  • U implementeert op Arm64 (Graviton, Ampere) — de verbeteringen in Arm64-codegeneratie verlagen direct de cloudkosten.
  • U NuGet-bibliotheken onderhoudt — C# 13-functies zoals [OverloadResolutionPriority] en partiële eigenschappen verbeteren de ervaring bij het schrijven van bibliotheken.

Houd rekening met de planning als:

  • U LTS-ondersteuning nodig hebt — .NET 8 blijft ondersteund tot november 2027. Als uw organisatie LTS vereist voor compliance, plan dan uw migratie naar .NET 10 (LTS) in plaats daarvan, terwijl u .NET 9 gebruikt voor nieuwe projecten.
  • U afhankelijk bent van pakketten van derden die nog geen .NET 9-targets hebben toegevoegd — controleer of uw kritieke afhankelijkheden net9.0 ondersteunen voordat u migreert.

Voor gebruikers van nopCommerce en Umbraco:

  • nopCommerce 4.90 richt zich native op .NET 9 — als u op 4.80 of eerder zit, geeft een upgrade naar 4.90 u automatisch al deze verbeteringen.
  • Umbraco 14+ draait op .NET 9 — alle 20+ Umbraco-plugins van SplatDev zijn gemigreerd en getest op .NET 9-compatibiliteit.

Upgradepad: een praktische checklist

  1. Installeer de .NET 9 SDK: Download van dotnet.microsoft.com.
  2. Werk het target framework bij: Wijzig <TargetFramework>net8.0</TargetFramework> in <TargetFramework>net9.0</TargetFramework> in alle .csproj-bestanden.
  3. Werk pakketreferenties bij: Upgrade alle NuGet-pakketten naar hun nieuwste versies die .NET 9 ondersteunen.
  4. Pak breaking changes aan: Bekijk de officiële lijst met breaking changes — het oppervlak is klein voor de meeste applicaties.
  5. Schakel nieuwe functies in: Stel <LangVersion>13</LangVersion> in om C# 13-functies te gebruiken.
  6. Draai uw testsuite: Volledige regressie over unit-, integratie- en E2E-tests.
  7. Benchmark vóór/na: Gebruik BenchmarkDotNet om de prestatieverbeteringen in uw specifieke workload te kwantificeren.

De conclusie

.NET 9 is geen revolutionaire release die de krantenkoppen haalt. Het is het soort release dat stilletjes alles beter maakt — uw lussen draaien met minder instructies, uw typecontroles raken snelle paden, uw GC past zich aan uw applicatie aan en uw API-specificaties worden automatisch gegenereerd. Deze verbeteringen stapelen zich op over elke HTTP-aanvraag, elke databasequery, elke Blazor-rendercyclus.

Voor teams die nog op .NET 6 of .NET 7 zitten, is het cumulatieve verschil van .NET 6 naar .NET 9 dramatisch — prestatiewinsten van 20-40% op veelvoorkomende workloads, een gemoderniseerde C#-taal, ingebouwde AI-integratie en een voor containers geoptimaliseerde runtime.

Bij SplatDev bouwen we op .NET sinds versie 1.0 in 2009. We hebben het platform zien groeien van alleen-Windows naar echt cross-platform, van closed-source naar volledig open, van alleen-enterprise naar cloud-native. .NET 9 vertegenwoordigt de meest capabele versie van het platform waarmee we ooit hebben gewerkt — en we leveren er al productie-workloads op.

Klaar om uw .NET-stack te upgraden? SplatDev biedt .NET-migratiediensten, prestatie-optimalisatie en full-stack-ontwikkeling — van nopCommerce en Umbraco tot maatwerk-enterprise-applicaties.

Praat met ons .NET-team

Of neem rechtstreeks contact met ons op: [email protected]

Want more articles like this?

Subscribe for updates on .NET, Umbraco, nopCommerce, and software engineering.

Get in touch →