Home / Blog

.NET 9 frente a .NET 8: qué hay de nuevo y por qué actualizar

Carlos Casalicchio · June 9, 2026 ·6 min de lectura

La cadencia de lanzamientos de .NET sigue acelerándose

Microsoft lanzó .NET 9 en noviembre de 2024 como una versión de soporte a corto plazo (STS), y la velocidad de mejora no muestra signos de desaceleración. Con más de 7,500 pull requests fusionadas solo en el repositorio dotnet/runtime, .NET 9 es la versión más rápida y con más capacidades de la plataforma hasta la fecha.

Pero "la más rápida" es un concepto abstracto. Como desarrolladores, necesitamos saber: ¿qué cambió realmente, qué mejora nuestro código y merece la pena la actualización?

Esta guía desglosa todas las mejoras relevantes de .NET 8 a .NET 9 —desde las características del lenguaje C# 13 hasta las mejoras de rendimiento del runtime, la integración de AI y las mejoras de ASP.NET Core— para que puedas tomar una decisión fundamentada para tu equipo.

C# 13: características del lenguaje que realmente usarás

C# 13 se incluye con el SDK de .NET 9 e introduce varias características que reducen el código repetitivo y mejoran la seguridad:

Colecciones params

Anteriormente, params estaba limitado a arrays. C# 13 amplía la compatibilidad de params a cualquier tipo de colección que implemente IEnumerable<T> y disponga de un método Add, incluidos List<T>, Span<T> y ReadOnlySpan<T>. Esto elimina asignaciones de arrays innecesarias al llamar a métodos con un número variable de argumentos.

Nuevo tipo Lock y su semántica

El tipo System.Threading.Lock reemplaza el patrón tradicional lock (obj) { } por un tipo específico que el compilador reconoce. La nueva palabra clave lock funciona con objetos Lock para generar código más eficiente y con mejor compatibilidad para la depuración.

Interfaces en ref struct

Los tipos ref struct ahora pueden implementar interfaces y utilizarse como argumentos de tipo en genéricos. Esto habilita patrones como las abstracciones de alto rendimiento basadas en spans, que antes eran imposibles debido a las restricciones de tipos.

Propiedades e indexadores parciales

Ahora se permiten propiedades e indexadores parciales en los tipos parciales, lo que hace que los generadores de código fuente sean más expresivos. Los autores de bibliotecas pueden declarar propiedades parciales en el código generado mientras que las implementaciones residen en el código del usuario, un patrón que simplifica enormemente las arquitecturas basadas en generadores de código fuente.

Prioridad en la resolución de sobrecargas

Los autores de bibliotecas ahora pueden designar una sobrecarga como preferente frente a las demás mediante el atributo [OverloadResolutionPriority]. Esto elimina los errores de compilación por llamadas ambiguas al añadir nuevas sobrecargas a APIs existentes sin romper el código de los consumidores.

Acceso implícito a indexadores en inicializadores de objetos

Ahora puedes utilizar el operador ^ (índice desde el final) en los inicializadores de objetos, lo que hace que la inicialización de colecciones sea más expresiva al rellenarlas desde el final de una secuencia.

Rendimiento del runtime: cada ciclo cuenta

La historia del rendimiento de .NET 9 se sustenta en cientos de mejoras específicas que se acumulan en las aplicaciones reales. Estos son los aspectos más destacados:

PGO dinámica: ahora optimiza conversiones y ramas

La optimización guiada por perfiles (PGO) dinámica —introducida en .NET 8— ahora va más allá del despacho virtual para incluir la optimización de conversiones. El JIT rastrea los tipos más habituales encontrados durante las operaciones obj is T y (T)obj, y luego genera rutas rápidas para esos tipos. En los microbenchmarks, las operaciones de comprobación de tipos se ejecutan hasta 4 veces más rápido en las rutas más habituales.

Optimizaciones de bucles: reducción de fuerza y conteo descendente

El JIT ahora realiza reducción de fuerza en los bucles de iteración de arrays, convirtiendo el acceso basado en índices en aritmética de punteros. Combinado con el conteo descendente automático (que reemplaza cmp + jl por un único jns), los bucles ajustados eliminan una instrucción por iteración. En los bucles de ruta crítica sobre grandes colecciones, esto se acumula rápidamente.

Eliminación de comprobaciones de límites: más inteligente que nunca

El análisis de comprobación de límites del JIT ahora gestiona patrones que antes se pasaban por alto: indexación inversa, condiciones de bucle complejas y accesos basados en spans que interactúan con comprobaciones de longitud anteriores. Menos comprobaciones de límites significan bucles más ajustados y menos ramas susceptibles de predecirse incorrectamente.

Recolección de basura: adaptación dinámica

El GC de servidor ahora incluye adaptación dinámica al tamaño de la aplicación, habilitada de forma predeterminada. El GC ajusta su comportamiento en función de los patrones de memoria reales de la aplicación en lugar de basarse en heurísticas fijas, reduciendo los tiempos de pausa en las cargas de trabajo intensivas en memoria sin sacrificar el rendimiento.

Vectorización y Arm64

La generación de código para Arm64 recibió una atención considerable, con una vectorización SIMD ampliada y un mejor uso de las instrucciones específicas de Arm. Para las cargas de trabajo en la nube que se ejecutan en procesadores Graviton o Ampere, esto se traduce directamente en menores costes de computación.

ASP.NET Core 9: seguro de forma predeterminada, más rápido por diseño

ASP.NET Core 9 automatiza las mejoras de seguridad al tiempo que eleva el techo de rendimiento:

Generación integrada de documentos OpenAPI

El nuevo paquete Microsoft.AspNetCore.OpenApi ofrece generación integrada de documentos OpenAPI sin necesidad de Swashbuckle ni NSwag. Los metadatos de las minimal APIs, los controladores y las anotaciones de tipos se reflejan automáticamente en las especificaciones OpenAPI generadas, lo que reduce la rotación de dependencias y mejora la compatibilidad.

Huella digital de recursos estáticos

La optimización en tiempo de compilación y de publicación de los archivos estáticos (JavaScript, CSS) ahora incluye versionado automático con huella digital. La invalidación de caché se vuelve automática, eliminando una fuente habitual de errores por recursos obsoletos.

Mejoras en Blazor

Las nuevas plantillas Hybrid y Web App simplifican la configuración de proyectos. La detección del modo de renderizado de componentes mejora la depuración. La experiencia de reconexión de Blazor Server se ha rediseñado, ofreciendo a los usuarios una experiencia más fluida cuando se pierden las conexiones de red.

Ampliación de Native AOT

La compatibilidad con la compilación anticipada (AOT) en ASP.NET Core se ha ampliado, reduciendo la latencia de arranque en frío y el consumo de memoria. Para los microservicios en contenedores, Native AOT supone imágenes más pequeñas y eventos de escalado horizontal más rápidos.

Certificado de desarrollo HTTPS en Linux

Configurar un certificado de desarrollo de confianza en Linux para HTTPS durante el desarrollo es ahora mucho más sencillo, una mejora en la calidad de vida para los equipos que desarrollan en estaciones de trabajo Linux.

Componentes básicos de AI: .NET se integra de forma nativa con AI

.NET 9 introduce una capa de abstracción de AI unificada, posicionando a .NET como una plataforma de primer nivel para las aplicaciones impulsadas por AI:

Microsoft.Extensions.AI

Un conjunto de abstracciones de C# para interactuar con servicios de AI: modelos de lenguaje pequeños y grandes (SLM y LLM), embeddings y almacenes de vectores. Estos paquetes proporcionan un modelo de programación coherente tanto si llamas a OpenAI, Azure OpenAI o modelos locales a través de ONNX Runtime.

Tensor<T> y TensorPrimitives

El nuevo tipo Tensor<T> ofrece una manipulación eficiente de datos multidimensionales con interoperabilidad de copia cero con ML.NET, TorchSharp y ONNX Runtime. TensorPrimitives se amplió de 40 a casi 200 operaciones optimizadas con SIMD, cubriendo las primitivas numéricas necesarias para la inferencia y la ingeniería de características.

ML.NET 4.0

ML.NET 4.0 incorpora la carga de modelos ONNX como Stream, nueva compatibilidad con tokenizadores para los modelos GPT, Llama, Phi y Bert, y ports experimentales en TorchSharp de las familias de modelos Llama y Phi. Si estás creando aplicaciones .NET que necesitan inferencia de AI en el dispositivo o dentro del propio proceso, esta es la versión que lo hace viable.

Biblioteca de tokenizadores

La biblioteca Microsoft.ML.Tokenizers ahora admite de serie los tokenizadores Tiktoken (GPT-3/4/4o/o1), Llama, CodeGen, Phi2 y Bert. Esto resulta esencial para gestionar las ventanas de contexto, calcular los costes de tokens y preprocesar el texto para los modelos locales.

EF Core 9: Cosmos DB y consultas precompiladas

Entity Framework Core 9 se centra en dos áreas: una integración más profunda con Azure Cosmos DB for NoSQL y las bases para la compilación anticipada:

  • Proveedor de Cosmos DB: actualizaciones importantes para el proveedor NoSQL, incluida una mejor traducción de LINQ, compatibilidad con claves de partición jerárquicas y una mejor gestión del rendimiento.
  • Consultas precompiladas: avances hacia consultas compiladas con AOT que eliminan la sobrecarga de compilación de consultas en tiempo de ejecución, algo crítico para el rendimiento de arranque en frío en entornos serverless y en contenedores.
  • Mejoras en los tipos complejos: mejor gestión de las entidades propias (owned) y los objetos de valor, reduciendo el código repetitivo necesario para modelos de dominio ricos.

.NET MAUI: rendimiento e integración de escritorio

.NET MAUI en .NET 9 da prioridad al rendimiento y a las capacidades de escritorio:

  • CollectionView y CarouselView recibieron nuevas implementaciones más eficientes en iOS y Mac Catalyst.
  • HybridWebView facilita la incorporación de contenido de React, Vue.js o Angular dentro de las aplicaciones MAUI.
  • Control TitleBar para las aplicaciones de escritorio de Windows, que ofrece personalización nativa de la barra de título.
  • Las mejoras en Native AOT y el recorte (trimming) reducen el tamaño de la aplicación y el tiempo de arranque en dispositivos móviles.

.NET 8 frente a .NET 9: comparación en paralelo

Categoría .NET 8 .NET 9
Tipo de versión LTS (3 años de soporte) STS (2 años de soporte)
Versión de C# C# 12 C# 13
PGO dinámica Despacho virtual/de interfaz Añade conversiones, ramas y perfilado de enteros
Abstracciones de AI Ninguna (solo paquetes NuGet) Microsoft.Extensions.AI, Tensor<T>
OpenAPI De terceros (Swashbuckle) Integrado con Microsoft.AspNetCore.OpenApi
Modo de GC Servidor/estación de trabajo fijo Adaptación dinámica al tamaño de la app
ref struct No puede implementar interfaces Puede implementar interfaces y usarse como argumento genérico
Optimizaciones de bucles Reconocimiento básico de bucles Reducción de fuerza, conteo descendente
LINQ Operadores estándar Añade CountBy, AggregateBy
Native AOT Compatibilidad limitada con ASP.NET Compatibilidad ampliada con ASP.NET

¿Deberías actualizar?

Actualiza de inmediato si:

  • Ejecutas cargas de trabajo sensibles al rendimiento y puedes beneficiarte de las optimizaciones del JIT, el GC y los bucles.
  • Estás creando funcionalidades impulsadas por AI: las nuevas abstracciones Microsoft.Extensions.AI y la compatibilidad con tokenizadores ya justifican por sí solas la migración.
  • Realizas despliegues en Arm64 (Graviton, Ampere): las mejoras en la generación de código para Arm64 reducen directamente los costes en la nube.
  • Mantienes bibliotecas NuGet: las características de C# 13 como [OverloadResolutionPriority] y las propiedades parciales mejoran la experiencia de creación de bibliotecas.

Ten en cuenta el calendario si:

  • Necesitas soporte LTS: .NET 8 sigue teniendo soporte hasta noviembre de 2027. Si tu organización requiere LTS por motivos de cumplimiento, planifica en su lugar tu migración a .NET 10 (LTS) mientras adoptas .NET 9 para los proyectos nuevos.
  • Dependes de paquetes de terceros que aún no han añadido compatibilidad con .NET 9: verifica que tus dependencias críticas admiten net9.0 antes de migrar.

Para usuarios de nopCommerce y Umbraco:

  • nopCommerce 4.90 está diseñado de forma nativa para .NET 9: si estás en la 4.80 o una versión anterior, actualizar a la 4.90 te proporciona todas estas mejoras automáticamente.
  • Umbraco 14+ se ejecuta sobre .NET 9: los más de 20 plugins de Umbraco de SplatDev han sido migrados y probados para garantizar la compatibilidad con .NET 9.

Ruta de actualización: una lista de comprobación práctica

  1. Instala el SDK de .NET 9: descárgalo desde dotnet.microsoft.com.
  2. Actualiza el framework de destino: cambia <TargetFramework>net8.0</TargetFramework> por <TargetFramework>net9.0</TargetFramework> en todos los archivos .csproj.
  3. Actualiza las referencias de paquetes: actualiza todos los paquetes NuGet a sus últimas versiones compatibles con .NET 9.
  4. Aborda los cambios incompatibles: revisa la lista oficial de cambios incompatibles: la superficie afectada es reducida en la mayoría de las aplicaciones.
  5. Habilita las nuevas características: establece <LangVersion>13</LangVersion> para usar las características de C# 13.
  6. Ejecuta tu conjunto de pruebas: regresión completa en las pruebas unitarias, de integración y E2E.
  7. Compara el rendimiento antes y después: usa BenchmarkDotNet para cuantificar las mejoras de rendimiento en tu carga de trabajo específica.

En resumen

.NET 9 no es una versión revolucionaria que acapare titulares. Es de ese tipo de versiones que, silenciosamente, lo mejoran todo: tus bucles se ejecutan con menos instrucciones, tus comprobaciones de tipos alcanzan rutas rápidas, tu GC se adapta a tu aplicación y tus especificaciones de API se generan automáticamente. Estas mejoras se acumulan en cada petición HTTP, cada consulta a la base de datos y cada ciclo de renderizado de Blazor.

Para los equipos que aún siguen en .NET 6 o .NET 7, la diferencia acumulada de .NET 6 a .NET 9 es notable: mejoras de rendimiento del 20-40 % en las cargas de trabajo habituales, un lenguaje C# modernizado, integración de AI incorporada y un runtime optimizado para contenedores.

En SplatDev, llevamos desarrollando sobre .NET desde la versión 1.0 en 2009. Hemos visto crecer la plataforma desde ser exclusiva de Windows hasta ser realmente multiplataforma, de código cerrado a totalmente abierta, de estar limitada al ámbito empresarial a ser nativa de la nube. .NET 9 representa la versión más capaz de la plataforma con la que hemos trabajado jamás, y ya estamos desplegando cargas de trabajo en producción sobre ella.

¿Listo para actualizar tu stack de .NET? SplatDev ofrece servicios de migración a .NET, optimización del rendimiento y desarrollo full-stack, desde nopCommerce y Umbraco hasta aplicaciones empresariales a medida.

Habla con nuestro equipo de .NET

O contáctanos directamente: [email protected]

Want more articles like this?

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

Get in touch →