Visual Studio 2010 (parte 6) – Parallel.For
O C# 4.0, presente no Visual Studio 2010, introduz um recurso para processamento paralelo, aproveitando de fato o poder dos novos processadores com 2 ou mais núcleos. Esse recurso é chamado de Task Parallel Library (TPL), disponível no namespace System.Threading.Tasks. Vejamos a seguir um exemplo muito simples, adaptado de um vídeo apresentado por Danny Shih.
using System;
using System.Diagnostics;
using System.Threading.Tasks;
namespace VS2010.Console
{
class Program
{
static void Main(string[] args)
{
Stopwatch stopWatch;
for (; ; )
{
// Contabilizando o tempo do FOR
stopWatch = Stopwatch.StartNew();
for (int c = 0; c < 10000; c++)
{
OperacaoGrande(10000);
}
System.Console.WriteLine("Tempo com FOR.........: " + stopWatch.ElapsedMilliseconds);
// Contabilizando o tempo do PARALLEL FOR
stopWatch = Stopwatch.StartNew();
Parallel.For(0, 10000, hum =>
{
OperacaoGrande(10000);
});
System.Console.WriteLine("Tempo com PARALLEL FOR: " + stopWatch.ElapsedMilliseconds);
System.Console.ReadLine();
}
}
static void OperacaoGrande(int n)
{
int tmp = 1;
for (int i = 0; i < n; i++)
tmp += tmp * i;
}
}
}
Executando o código acima numa aplicação do tipo console, iremos obter o seguinte resultado:
Podemos observar que o segundo FOR (linhas 25 a 29) executou a mesma operação 41% a 50% mais rápido que da forma tradicional. Claro, esse resultado dependerá do processador da máquina que estiver rodando o código. Pretendo explorar com mais profundidade esse assunto em posts futuros.