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
1
Anónimo
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...