sexta-feira, 25 de julho de 2014

Exemplo: Paralelismo em C# e VB.NET

Objetivo
Mostrar a sintaxe correta de loops e execução de métodos, em paralelismo, nas linguagens C# e VB.NET.
Consideramos que para os exemplos a seguir, seja usado o import/using do namespace System.Threading.Tasks.


Nota: se você não sabe o que é paralelismo, não deixe de visitar os outros artigos:


FOR - C#
            //Loop for tradicional
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i.ToString());
            }

            //Loop for paralelo
            Parallel.For(0, 10, i => 
            {
                Console.WriteLine(i.ToString());
            });

FOR - VB.NET
        'Loop for tradicional
        For i As Integer = 0 To 10 - 1
            Console.WriteLine(i.ToString())
        Next

        'Loop for paralelo
        Parallel.For(0, 10, Sub(i)
                                       Console.WriteLine(i.ToString())
                                 End Sub)

LISTA DE NÚMEROS
Para os códigos abaixo, consideramos a criação de uma lista de números inteiros, conforme código abaixo:
C#
            List<int> numbers = new List<int>();
            numbers.Add(100);
            numbers.Add(200);
            numbers.Add(300);
            numbers.Add(400);
            numbers.Add(500);

VB.NET
        Dim numbers As New List(Of Integer)
        numbers.Add(100)
        numbers.Add(200)
        numbers.Add(300)
        numbers.Add(400)
        numbers.Add(500)

FOR EACH - C#
            //Foreach tradicional
            foreach (int n in numbers)
            {
                Console.WriteLine(n.ToString());
            }

            //Foreach Paralelo
            Parallel.ForEach(numbers, n =>
            {
                Console.WriteLine(n.ToString());
            });

FOR EACH - VB.NET
        'Foreach tradicional
        For Each n As Integer In numbers
            Console.WriteLine(n.ToString())
        Next

        'Foreach Paralelo
        Parallel.ForEach(numbers, Sub(n)
                                      Console.WriteLine(n.ToString())
                                  End Sub)

LOOP EM LISTA - C#
            //Loop em lista
            numbers.ForEach(n => Console.WriteLine(n.ToString()));

            //Loop paralelo em lista
            numbers.AsParallel().ForAll(n => Console.WriteLine(n.ToString()));

LOOP EM LISTA - VB.NET
        'Loop em lista
        numbers.ForEach(Sub(n)
                            Console.WriteLine(n.ToString())
                        End Sub)

        'Loop paralelo em lista
        numbers.AsParallel().ForAll(Sub(n)
                                        Console.WriteLine(n.ToString())
                                    End Sub)

EXECUÇÃO DE MÉTODOS
Para os códigos a seguir, considere a criação do seguinte método:
C#
        private static void WriteNumber(int number)
        {
            Console.WriteLine(number.ToString());
        }

VB.NET
    Private Sub WriteNumber(number As Integer)
        Console.WriteLine(number.ToString())
    End Sub

MÉTODOS - C#
            //Método tradicional
            WriteNumber(888);

            //Método paralelo
            Parallel.Invoke(() => WriteNumber(999));

MÉTODOS - VB.NET
        'Método tradicional
        WriteNumber(888)

        'Método paralelo
        Parallel.Invoke(Sub()
                            WriteNumber(999)
                        End Sub)

Conclusão
Apesar de existir algumas diferenças de sintaxe entre as linguagens VB.NET e C#, as duas linguagens possuem suporte para o paralelismo, a partir do framework 4.0.

Nenhum comentário:

Postar um comentário