442 messaggi dal 09 marzo 2006
ciao.
Ho un DataTable con 10000 righe e devo svolgere un lavoro(che fa la funzione) su ognuna di queste righe in maniera indipendente.
Come faccio ad eseguire un parallel foreach in vb.net che richiama per ogni row del datatable la funzione passando il datarow come argomento della funzione?
Necessito inoltre di farmi ritornare dalla funzione o storare da qualche parte tutti i tipi di ritorno delle funzioni che invoco che sono dello stesso tipo.
Si puo fare?
Inoltre vorrei sapere se posso passare parametri addizionali alla funzione parallela e come , purtroppo in questo progetto uso vb.net .
grazie.
Modificato da giuseppe500 il 08 febbraio 2017 15.38 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Giuseppe,
puoi usare .AsEnumerable() sul tuo datatable per convertirlo in una collezione di DataRow. Subito dopo, usa .AsParallel() per poter effettuare un'esecuzione parallela sugli elementi di quella collezione.

Ecco un esempio
        'Creo un datatable di prova che contiene una sola colonna "id"
        Dim table As New DataTable()
        table.Columns.Add("Id", GetType(Integer))
        'Ci caricho 10000 righe
        For i = 1 To 10000
            table.Rows.Add(i)
        Next

        'Misuro il tempo che impiega l'algortimo
        Dim stopwatch As New Stopwatch()
        stopwatch.Start()
        'Parallelizzo l'esecuzione su numero di processori * 2 thread
        'In questo caso si tratta di una somma degli Id, ma potrei
        'usare Select al posto di Sum per proiettare un risultato
        Dim risultato = table.
            AsEnumerable().
            AsParallel().
            WithDegreeOfParallelism(Environment.ProcessorCount * 2).
            Sum(Function(dataRow)
                    Return dataRow("Id")
                End Function)
        stopwatch.Stop()
        Console.WriteLine(risultato)
        Console.WriteLine(stopwatch.Elapsed)

        Console.ReadLine()



Necessito inoltre di farmi ritornare dalla funzione o storare da qualche parte tutti i tipi di ritorno delle funzioni

Puoi usare datatable.AsEnumerable().AsParallel().Select(...). Otterrai indietro una collezione contenente i risultati dell'elaborazione. Occhio che l'ordine degli elementi non è garantito, a meno che non usi AsOrdered() dopo un AsParallel().


Inoltre vorrei sapere se posso passare parametri addizionali alla funzione parallela

Che tipo di dati ti occorrono?

ciao,
Moreno
Modificato da BrightSoul il 10 febbraio 2017 21.17 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.