Asp net multithreading

mercoledì 20 febbraio 2008 - 10.03

memmo77 Profilo | Expert

Salve. Come da Titolo, ho una applicazione in asp net. Qui faccio l'elaborazione di un file di testo molto lungo, anche 1.000.000 di record. Vorrei in pratica spacchettare questo file in 3 e lanciare l'elaborazione su 3 thread.
Sto utilizzando questo codice per la "partenza"

In un arraylist metto parte del file che divido per tre e lo passo alla funzione ELABORAZIONE_PARTE1

Dim pippo1 As New Elaborazione_class
Dim pippo2 As New Elaborazione_class
Dim pippo3 As New Elaborazione_class

pippo1.ArrayRecord = Int1_Array
pippo2.ArrayRecord = Int2_Array
pippo3.ArrayRecord = Int2_Array

T1 = New Thread(AddressOf pippo1.ELABORAZIONE_PARTE1) 'questo è membro di Elaborazione_class
T1.Start()
T2 = New Thread(AddressOf pippo2.ELABORAZIONE_PARTE1) 'questo è membro di Elaborazione_class
T2.Start()
''T3 = New Thread(AddressOf pippo3.ELABORAZIONE_PARTE1) 'questo è membro di Elaborazione_class
''T3.Start()

Finchè lancio un solo thread questo comincia e fa l'elaborazione, già se ne faccio partire due cominciano i problemi. Ma niente sono costretto a replicare per tre la funzione ELABORAZIONE_PARTE1, visto che i thread fanno partite le elaborazioni in parallelo? E quindi fare:

T1 = New Thread(AddressOf pippo1.ELABORAZIONE_PARTE1)
T1.Start()
T2 = New Thread(AddressOf pippo2.ELABORAZIONE_PARTE2)
T2.Start()
''T3 = New Thread(AddressOf pippo3.ELABORAZIONE_PARTE3)
''T3.Start()

C'è modo di sfruttare la stessa elaborazione per tutti e tre i thread? In +, avete qualche buon linck, guida, tutorial che spieghi i thread?
Grazie mille a tutti


luigidibiasi Profilo | Guru

Non so se hai ricopiato il codice ma mi sembra che hai passato lo stesso array all'elaborazione 2 e 3. Se puoi metti la firma del metodo ELABORAZIONE_PARTE1 della classe elaborazione_class.

memmo77 Profilo | Expert

Non so se hai ricopiato il codice ma mi sembra che hai passato lo stesso array all'elaborazione 2 e 3.

Si il codice era copiato quindi gli array sono giusti per il 2 e il 3


Se puoi metti la firma del metodo ELABORAZIONE_PARTE1 della classe elaborazione_class.

Dim pippo1 As New Elaborazione_class
pippo1.ArrayRecord = Int1_Array

T1 = New Thread(AddressOf pippo1.ELABORAZIONE_PARTE1)
T1.Start()

luigidibiasi Profilo | Guru

Ciao,
ho provato a implementare il funzionamento della tua classe (anche se non sapendo cosa fà non sono sicuro che sia uguale) e non ho riscontrato problemi.


' Questa è la classe con la variabile ed il metodo che dovrebbe elaborare la parte del file che gli passi

' Elaborazione_Parte1 qua inserisce numeri a caso per simulare qualche operazione

Public Class elaborazione_Class
Public ArrayRecord As ArrayList
Public Sub Elaborazione_Parte1()

While True
Dim k = Math.Round(Rnd(), 5)
If k = 0.12811 Then
ArrayRecord.Add(k)
End If
If ArrayRecord.Count > 200 Then
Exit While
End If
End While
End Sub
End Class


' per testarla ho usato queste linee di codice

Dim pippo1 As elaborazione_Class = New elaborazione_Class
Dim pippo2 As elaborazione_Class = New elaborazione_Class
Dim pippo3 As elaborazione_Class = New elaborazione_Class

pippo1.ArrayRecord = a1
pippo2.ArrayRecord = a2
pippo3.ArrayRecord = a3

Dim T1 As Threading.Thread = New Threading.Thread(AddressOf pippo1.Elaborazione_Parte1)
Dim T2 As Threading.Thread = New Threading.Thread(AddressOf pippo2.Elaborazione_Parte1)
Dim T3 As Threading.Thread = New Threading.Thread(AddressOf pippo3.Elaborazione_Parte1)


T1.Start()
T2.Start()
T3.Start()

Durante l'esecuzione dei 3 thread ho analizzato la proprietà count degli array e funzionavano correttamente. Se ti và in privato puoi mandarmi la classe così cerchiamo di capire meglio.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5