¿Se pueden Ejecutar consultas en Paralelo?

Tengo 5 Base de Datos en Access que les hago un Proceso y las paso a SQL Server, para eso creo 2 Conexiones ADO una para las tablas de Access y otra para las tablas de SQL Server.
¿La pregunta es Puedo ejecutar estos procesos en Paralelo? ¿Cómo? (El objetivo es tardar menos tiempo en los procesos)
¿Efectivamente voy a tardar menos tiempo? ¿Necesito múltiples procesadores?

1 Respuesta

Respuesta
1
Los proyectos Estándar EXE de VB no son multithread por lo tanto no podes ejecutar 2 procesos en paralelo.
La única que tienes, es usar un ActiveX EXE, que puede correr varios hilos a la vez, poner tus procesos en métodos de una clase, y crear dos instancias de esta clase y llamar a los métodos, el temas es que esto VB lo hace sincronicamente, así que para solucionar esto tendrías que poner un form con un Timer, y hacer las llamadas por medio del timer (¿un poco complicado no?)
Te doy un ejemplo
Hace un proyecto nuevo de tipo "ActiveX EXE"
De nombre ponele "VBMTEjecutor"
Anda a "Project", "VBMTEjecutor Properties", y marca "Thread per Object" (es un boton de opciones)
A la clase "Class1" ponele en nombre "Ejecutor" y pegale este código adentro:
Public Sub Procesar(ByVal Id As Long)
Dim iProceso As VBMTEjecutor.Proceso
Set iProceso = New VBMTEjecutor.Proceso
Load iProceso
iProceso.Procesar Id
Set iProceso = Nothing
End Sub
Añadi un Form al proyecto y ponele de nombre "Proceso"
Pegale un control timer al Form, y cambiale la propiedad "Enabled" a "False" y "Interval" a "10"
Pegale este codigo al Form
Private iId As Long
Public Sub Procesar(ByVal Id As Long)
iId = Id
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False
Dim i As Long
For i = 1 To 3
MsgBox "Proceso " & CStr(iId) & " iteración " & CStr(i)
Next
Unload Me
End Sub
Salva todo y compilalo
Hace un proyecto nuevo "Standard EXE"
De nombre ponele "VBMTCliente"
Anda a "Project", "References", y marca "VBMTEjecutor"
Pegale este código al "Form1"
Private Sub Form_Load()
Dim E1 As VBMTEjecutor.Ejecutor
Dim E2 As VBMTEjecutor.Ejecutor
Set E1 = New VBMTEjecutor.Ejecutor
Set E2 = New VBMTEjecutor.Ejecutor
E1.Procesar 1
E2.Procesar 2
Set E1 = Nothing
Set E2 = Nothing
End Sub
Salva todo
Ejecuta este proyecto, vas a ver que se te presentan 2 mensajes:
Proceso 1 iteración 1
Proceso 2 iteración 1
Anda dándole Ok a todos los mensajes (son 6 en total), y cerra el Form
Ahora, una pregunta, fíjate que yo primero llamo a
E1. Procesar 1
Si miras el código, podes ver que primero se tendían que presentar los 3 mensajes del proceso 1
Proceso 1 iteración 1
Proceso 1 iteración 2
Proceso 1 iteración 3
Y después los 3 del proceso 2, ya que yo llamo primero al proceso 1 y luego al 2
Como es esto de que se presenta
Proceso 1 iteración 1
¿Proceso 2 iteración 1
a la vez?
Es que están corriendo en paralelo !, porque el ActiveX creo un Thread para cada objeto...
Esto te serviría para correr 2 o más procesos en paralelo, como veras es medio complicado, es que visual no es ideal hacer aplicaciones multithreading...
Con respecto a velocidad, es cuestión de pruebas, pero yo supongo que tiene que ser un poco más rapido...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas