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.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.