0

.Net 6 Preview 3

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.‎

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:

‎PGO dinámico‎:

Estructuras en registro‎:

‎Completado .NET 6 EH Write Thru‎:

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.‎

Fernando Sonego

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *