Postupy: Vytvoření a spuštění dotazu jednoduché PLINQ
Následující příklad ukazuje, jak vytvořit jednoduchý paralelní LINQ dotaz pomocí AsParallel metodu na pořadí zdroje a provedení dotazu pomocí rozšíření ForAll<TSource> metody.
Poznámka |
---|
Tato dokumentace používá lambda výrazy k definování delegátů v PLINQ.Pokud nejste obeznámeni s lambda výrazy v jazyce C# nebo Visual Basic, pokračujte na Lambda výrazy v PLINQ a TPL. |
Příklad
Sub SimpleQuery()
Dim source = Enumerable.Range(100, 20000)
' Result sequence might be out of order.
Dim parallelQuery = From num In source.AsParallel()
Where num Mod 10 = 0
Select num
' Process result sequence in parallel
parallelQuery.ForAll(Sub(e)
DoSomething(e)
End Sub)
' Or use For Each to merge results first
' as in this example, Where results must
' be serialized sequentially through static Console method.
For Each n In parallelQuery
Console.Write("{0} ", n)
Next
' You can also use ToArray, ToList, etc
' as with LINQ to Objects.
Dim parallelQuery2 = (From num In source.AsParallel()
Where num Mod 10 = 0
Select num).ToArray()
'Method syntax is also supported
Dim parallelQuery3 = source.AsParallel().Where(Function(n)
Return (n Mod 10) = 0
End Function).Select(Function(n)
Return n
End Function)
For Each i As Integer In parallelQuery3
Console.Write("{0} ", i)
Next
Console.ReadLine()
End Sub
' A toy function to demonstrate syntax. Typically you need a more
' computationally expensive method to see speedup over sequential queries.
Sub DoSomething(ByVal i As Integer)
Console.Write("{0:###.## }", Math.Sqrt(i))
End Sub
var source = Enumerable.Range(100, 20000);
// Result sequence might be out of order.
var parallelQuery = from num in source.AsParallel()
where num % 10 == 0
select num;
// Process result sequence in parallel
parallelQuery.ForAll((e) => DoSomething(e));
// Or use foreach to merge results first.
foreach (var n in parallelQuery)
{
Console.WriteLine(n);
}
// You can also use ToArray, ToList, etc
// as with LINQ to Objects.
var parallelQuery2 = (from num in source.AsParallel()
where num % 10 == 0
select num).ToArray();
// Method syntax is also supported
var parallelQuery3 = source.AsParallel().Where(n => n % 10 == 0).Select(n => n);
Tento příklad ukazuje základní vzor pro vytváření a spouštění paralelní LINQ dotazy při řazení výsledků sekvence není důležité. neuspořádané dotazy jsou obvykle rychlejší než objednané dotazy. Dotaz oddíly zdroje na úkoly, které jsou spouštěny asynchronně na více podprocesů. Pořadí, ve kterém každý úkol dokončí závisí nejen na množství práce na zpracování prvků v oddílu, ale také na externí faktory, jako například způsob, jakým operační systém naplánuje každý podproces. Tento příklad je určen k prokázání využití a může běžet rychleji než ekvivalentní sekvenční LINQ dotazu objektů. Další informace o Vančurovou Principy Vančurovou v PLINQ. Další informace o zachování pořadí prvků v dotazu Postupy: Jak ovládat řazení v PLINQ dotazu.
Probíhá kompilace kódu
Vytvoření projektu aplikace konzoly
Příklad kódu vložte po hlavní metody.
Přidejte volání z hlavní SimpleQuery a stiskněte klávesu F5.
Viz také
Koncepty
Historie změn
Datum |
Poslední dokumenty |
Důvod |
---|---|---|
Květen 2010 |
Byla přidána poznámka týkající se používání vs. Vančurovou. |
Názory zákazníků |