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.
Precaució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
Conceptos
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. |