Con el lanzamiento de .NET 8, Microsoft introdujo una gran cantidad de nuevas características y mejoras en los marcos .NET Core y ASP.NET Core. Una de esas características es la clase SearchValues, que marca un importante paso adelante en la obtención eficiente de datos de conjuntos de datos. SearchValues ​​es un nuevo tipo introducido en .NET 8 diseñado para mejorar el rendimiento de las aplicaciones. Al utilizar técnicas de optimización como vectorización y aceleración de hardware, SearchValues ​​ofrece mejoras de velocidad y se combina perfectamente con .NET Core y ASP.NET Core. En este artículo, explicaremos cómo puede usar SearchValues ​​para mejorar la velocidad de las búsquedas en .NET Core. Aplicaciones. Cree un proyecto de aplicación de consola en Visual Studio. En primer lugar, creemos un proyecto de aplicación de consola .NET Core en Visual Studio. Suponiendo que Visual Studio 2022 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core. Inicie el IDE de Visual Studio. Haga clic en «Crear nuevo proyecto». En la ventana «Crear nuevo proyecto», seleccione «Aplicación de consola (.NET Core)» de la lista de plantillas que se muestran. Haga clic en Siguiente. En la ventana «Configura tu nuevo proyecto», especifica el nombre y la ubicación del nuevo proyecto. Haga clic en Siguiente. En la ventana «Información adicional» que se muestra a continuación, elija «.NET 8.0 (soporte a largo plazo)» como la versión del marco que le gustaría utilizar. Haga clic en Crear. Usaremos este proyecto de aplicación de consola .NET 8 para trabajar con los ejemplos de código que se muestran en las secciones siguientes de este artículo. Problemas de rendimiento de la búsqueda de cadenas Las búsquedas de cadenas son una parte fundamental de muchas aplicaciones. Si bien hay varias formas de buscar cadenas, encontrar el método más eficiente en cada caso puede ser un desafío. Por ejemplo, si bien puede utilizar el método IndexOfAny() para buscar la primera aparición de un carácter en una cadena, puede que no sea el método óptimo para búsquedas posteriores en las que los datos de entrada difieren. Considere el siguiente código que ilustra cómo puede realizar una búsqueda en una cadena usando el método IndexOfAny().string str = «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789»; carbonizarse[] c = {‘s’}; int indexOfAlpha = str.IndexOfAny(c);Si a continuación desea buscar más de un carácter en la misma cadena, necesitará una estrategia de búsqueda diferente, como se muestra en el fragmento de código que se proporciona a continuación. cadena numérica = «0123456789»; int indexOfAlphaNumeric = str.IndexOfAny(numeric.ToCharArray()); Consola.WriteLine(indexOfAlpha); Console.WriteLine(indexOfAlphaNumeric);Tenga en cuenta que hemos convertido la cadena numérica en una matriz de caracteres porque el método IndexOfAny() requiere una matriz de caracteres como parámetro. Si queremos buscar un rango de caracteres, debemos usar una cadena o un char.[].SearchValues ​​hace que estos diferentes tipos de búsquedas sean más sencillos de codificar y más rápidos de ejecutar. Esto se debe a que SearchValues ​​aprovecha el soporte de procesamiento vectorial en las CPU actuales que pueden procesar múltiples valores en paralelo. ¿Qué es SearchValues??SearchValues ​​es un nuevo tipo en el espacio de nombres System.Buffers en .NET que emplea vectorización y aceleración de hardware para mejorar la eficiencia y el rendimiento de la búsqueda. Los valores de búsqueda La clase representa una colección de valores inmutable y de solo lectura. Puedes usar SearchValues en cualquier ReadOnlySpan, lo que implica que puedes usarlo para buscar no solo cadenas sino también valores en una colección o incluso valores en un bloque de memoria. Las instancias de SearchValues ​​están diseñadas explícitamente para situaciones en las que se utiliza con frecuencia el mismo conjunto de valores para realizar búsquedas en tiempo de ejecución. Considere el siguiente código.SearchValues searchValues ​​= SearchValues.Create(«0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz»); bool IsAlphanumericContent(ReadOnlySpan texto) => texto.IndexOfAny(searchValues) != -1 ? true:false;Puede invocar el método IsAlphanumericContent() para verificar si el parámetro contiene texto alfanumérico usando el siguiente código.Console.WriteLine(IsAlphanumericContent(«Este es un texto alfanumérico solo con fines de demostración.»));Tenga en cuenta que SearchValues El tipo está diseñado para buscar la primera aparición de un valor particular dentro de una colección. Cuando usa SearchValues ​​en su código, el tiempo de ejecución determina una implementación óptima para el escenario particular. Por ejemplo, en el caso de la siguiente línea de código, SearchValues ​​buscará un rango contiguo de valores y determinará una implementación óptima para ese caso de uso. Valores de búsqueda.Create(«12345»);Las ganancias de rendimiento que logre con SearchValues ​​dependerán de sus datos de entrada y del tipo y volumen de los datos que se buscan. Puede esperar beneficios de rendimiento más significativos a medida que crece el volumen de datos. Evaluación comparativa del rendimiento de búsqueda en .NET El siguiente código muestra cómo puede ejecutar pruebas comparativas para comparar el rendimiento del método IndexOfAny usando una matriz de caracteres versus SearchValues.[MemoryDiagnoser]
clase pública PerformanceBenchmark { carácter privado[]
charValues ​​= { ‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’ }; valores de búsqueda privados searchValues ​​= SearchValues.Create(«muestra»); texto de cadena privada = «este texto está en minúsculas sólo para fines de prueba»;

[Benchmark]
público int IndexOfCharBenchmark() { return text.AsSpan().IndexOfAny(charValues); }

[Benchmark]
público int IndexOfSearchValuesBenchmark() { return text.AsSpan().IndexOfAny(searchValues); } }Para ejecutar las pruebas comparativas anteriores, debe especificar el siguiente código en su Program.cs.using BenchmarkDotNet.Running; utilizando SearchValuesDemo; resumen var = BenchmarkRunner.Run();La Figura 1 muestra las diferencias de rendimiento de estos dos enfoques cuando ejecuta las pruebas comparativas en la ventana de la consola. IDG Figura 1. ¡SearchValues ​​gana! Como puede ver en los datos de referencia, hay una mejora considerable en el rendimiento cuando se utiliza SearchValues. La introducción de SearchValues ​​en .NET 8 marca un cambio de paradigma en la eficiencia de la búsqueda de valores en una colección de datos. System.Buffers.SearchValues es un nuevo tipo diseñado para ser eficiente cuando se utiliza con frecuencia una colección de valores para búsquedas durante el tiempo de ejecución. Para mejorar la eficiencia del proceso de búsqueda, SearchValues ​​precalcula todos los datos necesarios cuando se crea una instancia de una instancia. Copyright © 2024 IDG Communications, Inc.

Source link