Cos'è una query parallela?
Molti aspetti di una query PLINQ sono simili alle query LINQ a oggetti non parallele. Come le query LINQ sequenziali, le query PLINQ eseguono operazioni su qualsiasi sorgente di dati IEnumerable o IEnumerable in<T> memoria e differiscono l'esecuzione, cioè non iniziano a essere eseguite fino a quando la query non viene enumerata. La differenza principale è che PLINQ cerca di sfruttare al meglio tutti i processori del tuo sistema. Il metodo consiste nel suddividere la sorgente dati in frammenti e poi eseguire query parallele su più processori per ogni frammento su un thread worker separato. In molti casi, l'esecuzione parallela significa che le query vengono eseguite significativamente più velocemente.
Con l'esecuzione parallela, PLINQ può migliorare significativamente le prestazioni (rispetto al codice più vecchio per certi tipi di query), spesso semplicemente aggiungendo operazioni di query AsParallel alla sorgente dati. Tuttavia, il parallelismo può introdurre una propria complessità, quindi non tutte le operazioni di query si seguono più velocemente in PLINQ. In effetti, il parallelismo rallenta alcune query. Pertanto, è importante capire come problemi come l'ordinamento influenzeranno le query parallele. Per maggiori informazioni, vedi Comprendere l'accelerazione in PLINQ.
Esempio semplice
Per 10.000 dati nella raccolta, il codice è il seguente:
Altre funzionalità utilizzate da PLINQ
1. Usando AsSequential, se non vuoi usare query parallele nel processo, puoi usare questa funzione per ripristinare query sequenziali.
2. Usando AsOrdered, poiché PLINQ viene eseguito in parallelo, i risultati potrebbero non essere in ordine, cosa che può essere interrogata aggiungendo il metodo AsOrdered.
3. Usa WithDegreeOfParallelism, questa proprietà può impostare il numero di CUP in parallelo sul computer.
Nota sulla scena
In molti casi, le query possono essere parallelizzate, ma il sovraccarico di impostare query parallele può superare i guadagni di prestazioni.Se la query non esegue un gran numero di calcoli, o se la sorgente dati è piccola, la query PLINQ può essere più lenta di una query sequenziale LINQ a oggetti。 Puoi utilizzare il Parallel Performance Analyzer in Visual Studio Team Server per confrontare le prestazioni di varie query, individuare colli di bottiglia di elaborazione e determinare se le query vengono eseguite in parallelo o in sequenza.
Riferimento:Il login del link ipertestuale è visibile.
|