Postupy: Určení režimu spouštění v PLINQ

Tento příklad ukazuje, jak vynutit plINQ obejít výchozí heuristiku a paralelizovat dotaz bez ohledu na tvar dotazu.

Poznámka:

Tento příklad je určený k předvedení využití a nemusí běžet rychleji než ekvivalentní sekvenční dotaz LINQ to Objects. Další informace o zrychlení naleznete v tématu Principy zrychlení v PLINQ.

Příklad

// 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 je navržený tak, aby využíval příležitosti pro paralelizaci. Ne všechny dotazy ale využívají paralelní spouštění. Pokud například dotaz obsahuje jednoho delegáta uživatele, který málo pracuje, bude dotaz obvykle spouštět rychleji. Postupné spouštění je rychlejší, protože režie spojená s povolením paralelizace provádění je dražší než rychlost získaná. Proto PLINQ automaticky paralelizuje každý dotaz. Nejprve prozkoumá tvar dotazu a různé operátory, které ho tvoří. Na základě této analýzy se plINQ ve výchozím režimu provádění může rozhodnout provést některé nebo všechny dotazy postupně. V některých případech ale můžete o svém dotazu vědět více než PLINQ dokáže zjistit z jeho analýzy. Můžete například vědět, že delegát je nákladný a že dotaz bude určitě těžit z paralelizace. V takovýchpřípadechch WithExecutionModeForceParallelism

Probíhá kompilace kódu

Vyjměte a vložte tento kód do ukázky dat PLINQ a volejte metodu z Main.

Viz také