Linq – ParallelQuery

Discutiendo sobre la proliferación de núcleos en los procesadores y como sacarle más provecho, os introduzco a la inicialización de colecciones con ‘Query’s’ en Linq utilizando el pragma ‘asParallel’  de esa forma podemos añadir ese atractivo «Extra» a funciones que normalmente dejan que decir por la falta de agilidad al ejecutarse.

 

' Ejemplo de inicializacion de Query's paralelas
' En este caso usando una coleccion de respuestas sobre una peticion de ping.
' Pep Lluis 2010

Module Module1

    Sub Main()
        'Si el sistema dispone de mas de un nucleo
        If System.Environment.ProcessorCount > 1 Then
            'Definir una lista de IP's... por ejemplo :
            Dim Ips = {"localhost""192.168.1.2""192.168.1.3"}

            'Construccion de la Linq parallel query
            Dim PingP = From ip In Ips.AsParallel
                        Select New System.Net.NetworkInformation.Ping().Send(ip)
            Dim asParallel As DateTime = DateTime.Now   'Tomar tiempo de incio proceso
            'Procesar las respuestas
            ProcessPings(PingP)
            'Mostrar el tiempo empleado (Desde el inicio hasta el proceso de respuestas)
            Console.WriteLine("Tiempo empleado, usando 'AsParallel' : {0}"DateTime.Now - asParallel)

            'Query sin 'asParallel'
            Dim PingS = From ip In Ips
                        Select New System.Net.NetworkInformation.Ping().Send(ip)
            Dim noParallel As DateTime = DateTime.Now   'Tomar Tiempo de Inicio
            ProcessPings(PingS)
            Console.WriteLine("Tiempo Empleado sin Parallel Query   : {0}"DateTime.Now - noParallel)
        Else
            Console.WriteLine("No se puede realizar el test con un solo nucleo.")
        End If
        Console.ReadLine()
    End Sub

    'Procesar respuestas
    Sub ProcessPings(ByVal Pings)
        For Each ping In Pings
            Console.WriteLine("{0} : {1}", ping.Status, ping.Address)
        Next
    End Sub
End Module
Espero vuestas opiniones,
Pep Lluis,
I have this post in English version, no doubt in contact with me if needed.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *