El 8 de abril se anunció el lanzamiento de la .Net 6 Preview 3. Esta versión está dedicada casi por completo a las características de rendimiento de bajo nivel. Muchas veces, estas mejoras no necesariamente se aprecian completamente, pero ayudan mucho a nuestras aplicaciones. La mayoría de estas mejoras se aplicaron directamente al sistema de tipo CLR, esto hace que interactúe de una forma más eficiente con las CPU modernas. En los últimos años, ha habido algunas tendencias clave de rendimiento con .NET, que incluyen: usar estructuras de manera más liberal en las bibliotecas y mover el código en tiempo de ejecución a C#. Ambas tendencias son visibles (directa o indirectamente) en estos cambios. También demuestra los esfuerzos continuos en un conjunto centrado de estrategias de desempeño.
Desde aquí puede descargar .NET 6 Preview 3 tanto Windows, macOS y Linux.
- Instaladores y binarios
- Imágenes de contenedores
- Paquetes de Linux
- Notas
- Problemas conocidos
- Rastreador de problemas de GitHub
Para tener mas novedades, consultala publicación ASP.NET Core para obtener más detalles sobre las novedades de la tecnología web. Para EF Core, La vista previa 3 incluye correcciones de errores y mejoras continuas en la infraestructura para admitir las próximas características, incluidos los modelos compilados y las tablas temporales.
.NET 6 se ha probado con Visual Studio 16.10 Preview 1 y Visual Studio para Mac 8.9. Le recomendamos que utilice esas compilaciones si desea probar .NET 6.
Para usuarios de Linux: .NET SDK 6 Preview 3 resuelve un problema en el que la restauración de NuGet falla en Linux debido a certificados NuGet caducados e interacciones desafortunadas con los cambios realizados en los almacenes de certificados raíz en Linux, transportados por certificados ca y paquetes nss. Actualice las implementaciones del SDK de .NET 5 y .NET 6 en Linux, lo antes posible.
Soporte
.NET 6 se lanzará en noviembre de 2021 y se admitirá durante tres años, como una versión de soporte a largo plazo (LTS). La matriz de la plataforma se ha ampliado significativamente.
Las adiciones son:
- Android
- IOs.
- Mac y Mac Catalyst, para x64 y Apple Silicon (también conocido como «M1»).
- Windows Arm64 (específicamente Escritorio de Windows).
Las imágenes de contenedor de Debian de .NET 6 se basan en Debian 11 («bullseye»), que actualmente se encuentra en pruebas.
Bibliotecas
Se han agregado las siguientes API y mejoras a las bibliotecas .NET.
Manejo más rápido de estructuras como valores del diccionario
Se ha agregado una nueva API no segura, CollectionsMarshal.GetValueRefOrNullRef, que hace que la actualización de los valores de estructura en Dictionaries sea más rápida. La nueva API está diseñada para escenarios de alto rendimiento, no para uso de uso general. Devuelve un valor a la estructura que luego se puede actualizar en su lugar con técnicas típicas.
Antes de este cambio, la actualización de los valores del diccionario era costosa para escenarios de alto rendimiento, ya que requiere una búsqueda de diccionario y una copia para apilar el struct, después de cambiar el , debe asignarse a la clave del diccionario nuevamente, lo que resulta en otra operación de búsqueda y copia. Esta mejora reduce el hashing de clave a 1 (de 2) y elimina todas las operaciones de copia de estructura.
Ejemplo:
ref MyStruct value = ref CollectionsMarshal.GetValueRefOrNullRef(dictionary, key); // Returns Unsafe.NullRef<TValue>() if it doesn't exist; check using Unsafe.IsNullRef(ref value) if (!Unsafe.IsNullRef(ref value)){ // Mutate in-place value.MyInt++; }
Comprobación y conversión de interfaz más rápidas
El rendimiento de la fundición de la interfaz se ha incrementado entre un 16% y un 38%. Esta mejora es útil para la coincidencia de patrones de C# con y entre interfaces.
Una de las mayores ventajas de mover partes del tiempo de ejecución de .NET de C++ a C# administrado es que reduce la barrera de la contribución. Esto incluye la conversión de interfaz, que se movió a C# como un cambio temprano de .NET 6. El solo hecho de poder leer parte del código que compone el tiempo de ejecución es un paso importante para desarrollar la confianza en la contribución, en sus diversas formas.
Tiempo de ejecución: Codegen
Los siguientes cambios mejoran la generación de código en RyuJIT, ya sea haciendo que el proceso sea más eficiente o que el código resultante sea más rápido de ejecutar.
Algunos links interesantes de las optimizaciones:
- Quitar comprobaciones de límites con pruebas de longitud Elisión de comprobación de límites de span con eliminación de nodos de comprobación de rango superior
- Admite la clonación de bucles de accesos a matrices de bytes
- JIT: ThrowHelpers no vacíos
- CSE para constantes de coma flotante
- Campos de solo lectura estáticos invariantes para habilitar optimizaciones CSE/Hoist-from-loops
- Doblar más con comprobaciones nulas para la cadena const
- Eliminación de cero init: no inicies temperaturas rastreadas sin campos GC
PGO dinámico:
- JIT: actualizaciones de perfil para fusiones de retorno y llamadas de cola
- Perfil de clase: Usar marcador de posición desconocido para el tipo de clase coleccionable
Estructuras en registro:
- Mejora de la estructura completada, parte 1: crear más LCL_FLD
- Mejorar la vitalidad de ‘STORE_BLK(lcl_var)’
Completado .NET 6 EH Write Thru:
- JIT: Habilitar EH Write Thru de forma predeterminada
- Registrar EH var que son de definición única
- 7 ~ 18% de mejora de la perf
Herramientas: La compatibilidad con .NET Hot Reload disponible para aplicaciones web
El soporte inicial para .NET Hot Reload ahora está disponible para ASP.NET proyectos Core & Blazor que usan dotnet watch .NET Hot Reload aplica cambios de código a la aplicación en ejecución sin reiniciarla y sin perder ningún estado de la aplicación. Los cambios de código que no se pueden aplicar a la aplicación en ejecución aún se pueden aplicar reconstruyendo y reiniciando la aplicación.
Este es solo el primer paso en nuestro plan más completo para llevar esta tecnología a todos los desarrolladores de .NET, incluidos los de escritorio (WPF, WinUI, WinForms), escenarios de cliente multiplataforma en .NET MAUI y más. .NET Hot Reload se admitirá con estas plataformas adicionales en futuras versiones preliminares de .NET 6. Además, también haremos que .NET Hot Reload esté disponible como una experiencia integrada en futuras versiones de Visual Studio.
Para obtener más información sobre cómo probar Hot Reload con proyectos de aplicaciones web, ver actualizaciones de ASP.NET Core en .NET 6 Preview 3
Conclusión
Estamos a la mitad de la versión de .NET 6, al menos en términos de desarrollo de características. Puede leer sobre otras características que se han agregado, en las versiones Preview 2 y Preview 1. Algunas características más grandes llegarán en las próximas previews antes de comenzar a centrarnos en la calidad en las compilaciones release candidate.