Teste de Paralelismo em C#

21/12/2011 10:48:54 - Fábio Ferreira de Souza

Baseado no exemplo Parallel.ForEach Loop que usa uma expressão Lambda em multi-linhas recriei o seguinte código abaixo, onde é possível trocar rapidamente entre o uso convencional de um foreach() ou um Parallel.ForEach sem alterar o núcleo logico principal.

A diferença é incrível, basicamente do dobro de performance, veja os resultados comentados em verde no código abaixo.

 

image image

Veja abaixo o gráfico de performance dos dois casos.
É importante novar também que a memoria também oscilou, pois agora são processados várias coisas ao mesmo tempo, e consequentemente há um consumo maior de memoria para armazenar os vários processos (threads)

No-Parallel  Has-Parallel

Estes testes fiz com 126 imagens na resolução de 1024x768 em um Notebook Dell Intel i5 (4 núcleos) com 4GB de memória

Rodando em paralelo, o .Net usa 100% de performance de todos os núcleos, sem ter que aguardar alguns processos internos normal de uma logica linear (não paralela).
Mas cuidado, se no servidor, ou no desktop, estiver sendo executado outras operações que exigem a máquina…
Quando a máquina chega a 100% de CPU até o mouse começa a pular, e dá a impressão de travamento…

Conclusão: Otimize usando Paralelismo e expressões Lambda

Fazendo um código bem feito usando for ou foreach convencional, é fácil mudar para um modo de execução com paralelismo (multi-Thread).

Veja no resultado que são criadas várias Threds de execução:

Lighthouse245.jpg on thread 40
Jellyfish5.jpg on thread 51
Penguins34.jpg on thread 44
Lighthouse2345.jpg on thread 37
Lighthouse345.jpg on thread 32
Lighthouse25.jpg on thread 40
Tulips25.jpg on thread 45
Jellyfish2345.jpg on thread 56
Lighthouse35.jpg on thread 32
Penguins345.jpg on thread 44
Jellyfish35.jpg on thread 23
Jellyfish25.jpg on thread 55
Penguins5.jpg on thread 29
Tulips234.jpg on thread 43
Tulips3.jpg on thread 45
Tulips34.jpg on thread 45
Tulips345.jpg on thread 45
Total: 7,626ms

Veja mais: