¿Qué es una consulta paralela?
Muchos aspectos de una consulta PLINQ son similares a consultas LINQ a objetos no paralelas. Al igual que las consultas LINQ secuenciales, las consultas PLINQ realizan operaciones sobre cualquier fuente de datos IEnumerable o IEnumerable en<T> memoria y posponen la ejecución, es decir, no comienzan a ejecutarse hasta que la consulta está enumerada. La principal diferencia es que PLINQ intenta aprovechar al máximo todos los procesadores de tu sistema. El método consiste en particionar la fuente de datos en fragmentos y luego realizar consultas paralelas en múltiples procesadores para cada fragmento en un hilo de trabajo separado. En muchos casos, la ejecución paralela significa que las consultas se ejecutan significativamente más rápido.
Con la ejecución paralela, PLINQ puede mejorar significativamente el rendimiento (en comparación con el código antiguo para ciertos tipos de consultas), a menudo simplemente añadiendo operaciones de consulta AsParallel a la fuente de datos. Sin embargo, el paralelismo puede introducir su propia complejidad, por lo que no todas las operaciones de consulta se ejecutan más rápido en PLINQ. De hecho, el paralelismo ralentiza algunas consultas. Por lo tanto, es importante entender cómo problemas como la ordenación afectarán a las consultas paralelas. Para más información, véase Entendiendo la aceleración en PLINQ.
Ejemplo sencillo
Para 10.000 piezas de datos en la colección, el código es el siguiente:
Otras características utilizadas por PLINQ
1. Usando AsSequential, si no quieres usar consultas paralelas en el proceso, puedes usar esta función para restaurar consultas secuenciales.
2. Usando AsOrdered, dado que PLINQ se ejecuta en paralelo, los resultados pueden no estar en orden, lo que puede consultarse añadiendo el método AsOrder.
3. Usar WithDegreeOfParallelism, esta propiedad puede establecer el número de CUPs en paralelo en el ordenador.
Nota de la escena
En muchos casos, las consultas pueden paralelizarse, pero la sobrecarga de configurar consultas paralelas puede superar las ganancias de rendimiento.Si la consulta no realiza un gran número de cálculos, o si la fuente de datos es pequeña, la consulta PLINQ puede ser más lenta que una consulta secuencial de LINQ a objetos。 Puedes usar el Parallel Performance Analyzer en Visual Studio Team Server para comparar el rendimiento de varias consultas, encontrar cuellos de botella en el procesamiento y determinar si las consultas se ejecutan en paralelo o secuencialmente.
Referencia:El inicio de sesión del hipervínculo es visible.
|