Compartir a través de


Cómo: Especificar el modo de ejecución en PLINQ

En este ejemplo se muestra cómo forzar a PLINQ a omitir su heurística predeterminada y ejecutar en paralelo una consulta sin tener en cuenta la forma de la consulta.

Nota de precauciónPrecaución

Este ejemplo está diseñado para mostrar el uso y podría no ejecutarse más rápidamente que la consulta secuencial equivalente de LINQ to Objects.Para obtener más información sobre la aceleración, vea Introducción a la velocidad en PLINQ.

Ejemplo

Private Shared Sub ForceParallel()
    Dim customers = GetCustomers()
    Dim parallelQuery = (From cust In customers.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism) _
        Where cust.City = "Berlin" _
        Select cust.CustomerName).ToList()
End Sub
// Paste into PLINQDataSample class.
static void ForceParallel()
{
    var customers = GetCustomers();
    var parallelQuery = (from cust in customers.AsParallel()
                            .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                         where cust.City == "Berlin"
                         select cust.CustomerName)
                        .ToList();
}

PLINQ está diseñado para aprovechar las oportunidades para la ejecución en paralelo. Sin embargo, no todas las consultas se benefician de la ejecución en paralelo. Por ejemplo, cuando una consulta contiene un delegado de usuario único que hace muy poco trabajo, la consulta normalmente se ejecutará más rápidamente de forma secuencial. Esto se debe a que la sobrecarga necesaria para habilitar la ejecución en paralelo es más costosa que la velocidad que se obtiene. Por consiguiente, PLINQ no ejecuta en paralelo cada consulta de forma automática. Primero examina la forma de la consulta y los diversos operadores que la comprenden. En función de este análisis, PLINQ en el modo de ejecución predeterminado puede decidir ejecutar algunas consultas o todas ellas secuencialmente. Sin embargo, en algunos casos puede saber sobre su consulta más de lo que PLINQ puede determinar a partir de su análisis. Por ejemplo, puede saber que un delegado es muy costoso y que la consulta se beneficiará definitivamente de la ejecución en paralelo. En esos casos, puede usar el método WithExecutionMode<TSource> y especificar el valor ForceParallelism para indicar a PLINQ que ejecute siempre la consulta en paralelo.

Compilar el código

Corte y pegue este código en Ejemplo de datos de PLINQ y llame al método desde Main.

Vea también

Referencia

AsSequential<TSource>

Conceptos

Parallel LINQ (PLINQ)

Historial de cambios

Fecha

Historial

Motivo

Mayo de 2010

Se ha agregado una nota sobre el uso frente a aceleración.

Comentarios de los clientes.