Procedimiento para 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 paralelizar una consulta, independientemente de la forma de la consulta.
Nota
La finalidad de este ejemplo es mostrar el uso, y puede que su ejecución no sea tan rápida como la de la consulta LINQ to Objects secuencial equivalente. Para más información sobre la velocidad, vea Introducción a la velocidad en PLINQ.
Ejemplo
// 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();
}
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
PLINQ está diseñado para aprovechar las oportunidades para la paralelización. Sin embargo, no todas las consultas se beneficiarán de la ejecución en paralelo. Por ejemplo, cuando una consulta contiene un delegado de usuario único que realiza poco trabajo, la consulta normalmente se ejecutará con mayor rapidez de forma secuencial. La ejecución secuencial es más rápida porque la sobrecarga necesaria para habilitar la ejecución en paralelo es más cara que la velocidad que se obtiene. Por lo tanto, PLINQ no paraleliza automáticamente todas las consultas. Primero examina la forma de la consulta y los diversos operadores que la componen. En función de este análisis, PLINQ en el modo de ejecución predeterminado puede decidir ejecutar algunas o todas las consultas de forma secuencial. Sin embargo, en algunos casos, puede saber más sobre su consulta de lo que PLINQ es capaz de determinar a partir de su análisis. Por ejemplo, puede saber que un delegado es caro y que la consulta se beneficiará definitivamente de la paralelización. En tales casos, puede usar el método WithExecutionMode y especificar el valor ForceParallelism para indicar a PLINQ que ejecute siempre la consulta de forma paralela.
Compilar el código
Corte y pegue este código en el ejemplo de datos de PLINQ y llame al método desde Main
.