Citar
Hola, quisiera saber cual es el probelma principal, o sea el "porque" de que te tarde tanto procesar esos registros ¿podes poner el codigo de esos registros?...porque capas estas haciendo algo mal ahi...y procesar esa cantidad de registros no debe haber problemas...hay procesos que procesan mas registros y no usan thread para nada.
si quieres pongo aqui mi cogido y le hechais un vistazo, lo unico para lo que quiero los threads es por estetica, para que el formulario no se quede en modo "No Responde" al ser una operación tan grande:
Código
Function AsignaOperaciones(fileName As String, ByRef matriz As totalExpedientes, PB1 As ProgressBar) As Integer Dim file As Integer Dim linea As String Dim lineaGestion As String Dim vDatos As Variant Dim indice As Long Dim gestion As Double Dim encontrado As Boolean file = FreeFile PB1.Min = 0 PB1.Max = 149000 Open fileName For Input As #file Do Until EOF(file) Line Input #file, linea vDatos = Split(linea, "*") gestion = 0 indice = BuscaExpediente(Val(vDatos(0)), matriz, encontrado) lineaGestion = vDatos(2) If encontrado Then If matriz.expedientes(indice).gestion <> "" Then gestion = matriz.expedientes(indice).gestion Else gestion = 0 End If matriz.expedientes(indice).TipoOperacion = vDatos(1) matriz.expedientes(indice).gestion = gestion + CalculaSaldos(lineaGestion) matriz.expedientes(indice).Asignacion = vDatos(3) matriz.expedientes(indice).Defectuosa = vDatos(4) matriz.expedientes(indice).Subsanada = vDatos(5) matriz.expedientes(indice).Anulada = vDatos(6) End If If PB1.Max <> PB1.Value Then PB1.Value = PB1.Value + 1 End If Loop Close #file PB1.Value = 0 End Function
esto es una función, y la función BuscaExpediente es la siguiente:
Código
Function BuscaExpediente(numExp As String, matriz As totalExpedientes, ByRef bandera As Boolean) As Long bandera = False For i = 0 To matriz.numExpedientes - 1 Step 1 If numExp = matriz.expedientes(i).Expediente Then bandera = True BuscaExpediente = i Exit Function End If Next BuscaExpediente = -1 End Function
la estructura totalExpedientes es la siguiente
Código
Type EstructuraExpediente Expediente As String FechaFirma As String Procedencia As String FechaFactura As String Debe As String Haber As String Saldo As String TipoOperacion As String gestion As String Defectuosa As String Subsanada As String Asignacion As String Anulada As String End Type Type totalExpedientes expedientes() As EstructuraExpediente numExpedientes As Long End Type
En resumen, mi funcion buscaExpedientes realiza un bucle bastante grande,
y la funcion de AsignaOperaciones abre un archivo que contiene 150000 lineas con lo cual tiene que recorrer 150000 lineas y buscar en la matriz el correspondiente expediente para asignarle valores de la linea(cada linea corresponde a un expediente). Espero haberme explicado..
Un saludo y Gracias!