O que é uma consulta paralela?
Muitos aspectos de uma consulta PLINQ são semelhantes às consultas LINQ para Objetos não paralelas. Assim como consultas sequenciais LINQ, consultas PLINQ realizam operações em qualquer fonte de dados IEnumerável ou IEnumerável<T> em memória e adiam a execução, ou seja, só começam a ser executadas quando a consulta é enumerada. A principal diferença é que a PLINQ tenta aproveitar ao máximo todos os processadores do seu sistema. O método é particionar a fonte de dados em fragmentos e então realizar consultas paralelas em múltiplos processadores para cada fragmento em um thread de trabalho separado. Em muitos casos, a execução paralela significa que as consultas rodam significativamente mais rápido.
Com execução paralela, o PLINQ pode melhorar significativamente o desempenho (em comparação com códigos antigos para certos tipos de consultas), muitas vezes simplesmente adicionando operações de consulta AsParallel à fonte de dados. No entanto, o paralelismo pode introduzir sua própria complexidade, então nem todas as operações de consulta rodam mais rápido no PLINQ. Na verdade, o paralelismo até desacelera algumas consultas. Portanto, é importante entender como questões como a ordenação afetarão consultas paralelas. Para mais informações, veja Entendendo aceleração no PLINQ.
Exemplo simples
Para 10.000 dados na coleção, o código é o seguinte:
Outros recursos usados pela PLINQ
1. Usando o AsSequential, se você não quiser usar consultas paralelas no processo, pode usar esse recurso para restaurar consultas sequenciais.
2. Usando o AsOrdered, como o PLINQ roda em paralelo, os resultados podem não estar em ordem, o que pode ser consultado adicionando o método AsOrdered.
3. Use WithDegreeOfParallelism, essa propriedade pode definir o número de CUPs em paralelo no computador.
Nota da cena
Em muitos casos, consultas podem ser paralelizadas, mas a sobrecarga de configurar consultas paralelas pode superar os ganhos de desempenho.Se a consulta não realizar um grande número de cálculos, ou se a fonte de dados for pequena, a consulta PLINQ pode ser mais lenta do que uma consulta sequencial LINQ para Objetos。 Você pode usar o Parallel Performance Analyzer no Visual Studio Team Server para comparar o desempenho de várias consultas, encontrar gargalos de processamento e determinar se as consultas estão rodando em paralelo ou sequencialmente.
Referência:O login do hiperlink está visível.
|