Usuario
OPTIMIZAR PROGRAMA

Pregunta
-
Hola!
he creado un programa, funciona bien pero tarda en cargar formularios y de repente se traba :( ...si alguien me puede dar algunas sugerencias para optimizarlo, se lo agradecería muchísimo.
Mitzuko -.-
- Cambiado Enrique M. Montejo jueves, 18 de agosto de 2016 9:36 Pregunta relacionada con tiempo de carga de Windows Forms.
Todas las respuestas
-
-
-
-
-
Hola Mitzuko -.-,
[-] ... funciona bien pero tarda en cargar formularios y de repente se traba :( ...si alguien me puede dar algunas sugerencias para optimizarlo
Puede deberse a varios factores, pero con la poca información que nos proporcionas no podemos darte un solución acertada. La pregunta es :
- Todos los formularios se demoran en cargar, o sólo algunos ?
- Los formularios que tardan, muestran grandes cantidades de datos? (Por ejemplo, si cargas un dgv con más de 100'000 registros..)
- A qué te refieres con que se traba? La aplicación deja de funcionar (Aparece el famoso No-responde), te muestra los formularios pixeleados, etc....
Como puedes ver hay varias posibilidades, deberías explicar con más detalle y si puedes subir capturas de pantalla sería de gran ayuda.
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI -
Private Sub AccesoFormPrincipal(ByVal TextoForm As String) 'Guardamos la cadena como un valor para poderla graficar StrBufferEntrada = TextoForm 'Se muestra todos los datos recibidos en un cuadro de texto en el formulario de "ARCHIVO DE DATOS" ARCHIVO_DE_DATOS.TextBox2.Text = StrBufferEntrada 'Reloj reloj() 'Se corrobora que la cadena cpntenga informaion y se hace el proceso para mostrar los datos If (StrBufferEntrada <> "") Then 'Fracciona la cadena de entrada cada dos puntos ":" cadena = StrBufferEntrada.Split(":") 'Prueba de conexion del kas If cadena(0) = "KAS" Then CONEXION.TextBox1.Text = "KAS PREPARADO" CONEXION.TextBox1.BackColor = Color.Green ElseIf cadena(0) = "INTERFAZ" Then CONEXION.TextBox1.Text = "CONEXION CORRECTA" CONEXION.TextBox1.BackColor = Color.Green CONEXION.BOTONCONECTAR.BackColor = Color.Green End If 'Conteo de datos para friccion X = X + 1 'Asignar datos previamente dividido a cada variable A1 = Val(cadena(0)) 'Axial A2 = Val(cadena(1)) 'Flexion-Extension A3 = Val(cadena(2)) 'Rotacion A4 = Val(cadena(3)) 'Anterior-Posterior CONT = cadena(4) 'Contador de ciclos Ciclo.Text = CONT 'Estado If Val(cadena(5)) = 1 Then ESTADO.BackColor = Color.Green ElseIf Val(cadena(5)) = 0 Then ESTADO.BackColor = Color.Gray End If 'Energizado If Val(cadena(6)) = 1 Then ENERGIZADO.BackColor = Color.Green ElseIf Val(cadena(6)) = 0 Then ENERGIZADO.BackColor = Color.Gray End If 'Corriendo If Val(cadena(7)) = 1 Then CORRIENDO.BackColor = Color.Green ElseIf Val(cadena(7)) = 0 Then CORRIENDO.BackColor = Color.Gray End If Fric = cadena(8) 'Valor de la friccion se guaarda en variable friccion_prom() ' funcion para calculo de friccion 'Calibracion "Activo" If Val(cadena(13)) = 1 Then PictureBox1.BackColor = Color.Yellow ElseIf Val(cadena(13)) = 0 Then PictureBox1.BackColor = Color.Gray End If 'Automatico "Activo" If Val(cadena(14)) = 1 Then PictureBox2.BackColor = Color.Yellow MOVIMIENTO_AUTOMATICO.INICIAR.BackColor = Color.Green ElseIf Val(cadena(14)) = 0 Then PictureBox2.BackColor = Color.Gray MOVIMIENTO_AUTOMATICO.INICIAR.BackColor = Color.Gray End If 'Manual "Activo" If cadena(15) = "1" Then PictureBox3.BackColor = Color.Yellow ElseIf cadena(15) = "0" Then PictureBox3.BackColor = Color.Gray End If TextBox1.Text = cadena(16) 'Mensaje de automatico 'Sensores If cadena(17) = "1" Then MONITOREO.PictureBox1.BackColor = Color.Green Else MONITOREO.PictureBox1.BackColor = Color.Red End If If cadena(18) = "1" Then MONITOREO.PictureBox2.BackColor = Color.Green Else MONITOREO.PictureBox2.BackColor = Color.Red End If If cadena(19) = "1" Then MONITOREO.PictureBox3.BackColor = Color.Green Else MONITOREO.PictureBox3.BackColor = Color.Red End If If cadena(20) = "1" Then MONITOREO.PictureBox4.BackColor = Color.Green Else MONITOREO.PictureBox4.BackColor = Color.Red End If If cadena(21) = "1" Then MONITOREO.PictureBox5.BackColor = Color.Green Else MONITOREO.PictureBox5.BackColor = Color.Red End If If cadena(22) = "1" Then MONITOREO.PictureBox6.BackColor = Color.Green Else MONITOREO.PictureBox6.BackColor = Color.Red End If If cadena(23) = "1" Then MONITOREO.PictureBox7.BackColor = Color.Green Else MONITOREO.PictureBox7.BackColor = Color.Red End If If cadena(24) = "1" Then MONITOREO.PictureBox8.BackColor = Color.Green Else MONITOREO.PictureBox8.BackColor = Color.Red End If 'Carga axial If cadena(25) = "1" Then MONITOREO.PictureBox11.BackColor = Color.Green Else MONITOREO.PictureBox11.BackColor = Color.Red End If 'Tapa If cadena(26) = "1" Then MONITOREO.PictureBox12.BackColor = Color.Green Else MONITOREO.PictureBox12.BackColor = Color.Red End If 'MODO ACTIVO 'Calibracion If Val(cadena(27)) = 1 Then PictureBox7.BackColor = Color.Green ElseIf Val(cadena(27)) = 0 Then PictureBox7.BackColor = Color.Gray End If 'Automatico If Val(cadena(28)) = 1 Then PictureBox8.BackColor = Color.Green ElseIf Val(cadena(28)) = 0 Then PictureBox8.BackColor = Color.Gray End If 'Manual If Val(cadena(29)) = 1 Then PictureBox9.BackColor = Color.Green ElseIf Val(cadena(29)) = 0 Then PictureBox9.BackColor = Color.Gray End If 'ADVERTENCIA If (cadena(30) <> "") Then TextBox10.Text = (cadena(30)) PictureBox11.BackColor = Color.Red Else TextBox10.Text = "" PictureBox11.BackColor = Color.Transparent End If 'NIVEL If Val(cadena(31)) = 1 Then PictureBox10.BackColor = Color.Green ElseIf Val(cadena(31)) = 0 Then PictureBox10.BackColor = Color.Red End If 'TEMPERATURA TextBox12.Text = (cadena(32)) 'Contador para graficar solo una muestra de datos CONTADOR_DE_DATOS = CONTADOR_DE_DATOS + 1 'LIIMITES DE GRAFICAS X-Y If (OK_A.BackColor = Color.Green And TextBox2.Text <> "" And TextBox3.Text <> "" And Numeric1.Text <> "") Then If (Val(TextBox2.Text) < Val(TextBox3.Text)) Then AXIAL.ChartAreas(0).AxisY.Minimum = Val(TextBox2.Text) AXIAL.ChartAreas(0).AxisY.Maximum = Val(TextBox3.Text) Else MsgBox("VALORES NO VALIDOS EN EJE 'Y'") TextBox2.Text = "" TextBox3.Text = "" End If If Val(Numeric1.Text) > 0 Then X_A = Numeric1.Text Else MsgBox("VALOR NO VALIDO EN EJE 'X'") Numeric1.Text = "" End If ElseIf (OK_A.BackColor = Color.Green And (TextBox2.Text = "" Or TextBox3.Text = "" Or Numeric1.Text = "")) Then OK_A.BackColor = Color.White MsgBox("ASIGNE TODOS LOS VALORES A LOS EJES") End If If (OK_F.BackColor = Color.Green And TextBox4.Text <> "" And TextBox5.Text <> "" And Numeric2.Text <> "") Then If Val(TextBox4.Text) < Val(TextBox5.Text) Then FLEXION_EXTENSION.ChartAreas(0).AxisY.Minimum = Val(TextBox4.Text) FLEXION_EXTENSION.ChartAreas(0).AxisY.Maximum = Val(TextBox5.Text) Else : MsgBox("VALORES NO VALIDOS EN EJE 'Y'") TextBox4.Text = "" TextBox5.Text = "" End If If Val(Numeric2.Text) > 0 Then X_F = Numeric2.Text Else MsgBox("VALOR NO VALIDO EN EJE 'X'") Numeric2.Text = "" End If ElseIf (OK_F.BackColor = Color.Green And (TextBox4.Text = "" Or TextBox5.Text = "" Or Numeric2.Text = "")) Then OK_F.BackColor = Color.White MsgBox("ASIGNE TODOS LOS VALORES A LOS EJES") End If If (OK_R.BackColor = Color.Green And TextBox6.Text <> "" And TextBox7.Text <> "" And Numeric3.Text <> "") Then If Val(TextBox6.Text) < Val(TextBox7.Text) Then ROTACION.ChartAreas(0).AxisY.Minimum = Val(TextBox6.Text) ROTACION.ChartAreas(0).AxisY.Maximum = Val(TextBox7.Text) Else : MsgBox("VALORES NO VALIDOS EN EJE 'Y'") TextBox6.Text = "" TextBox7.Text = "" End If If Val(Numeric3.Text) > 0 Then X_R = Numeric3.Text Else MsgBox("VALOR NO VALIDO EN EJE 'X'") Numeric3.Text = "" End If ElseIf (OK_R.BackColor = Color.Green And (TextBox6.Text = "" Or TextBox7.Text = "" Or Numeric3.Text = "")) Then OK_R.BackColor = Color.White MsgBox("ASIGNE TODOS LOS VALORES A LOS EJES") End If If (OK_AN.BackColor = Color.Green And TextBox8.Text <> "" And TextBox9.Text <> "" And Numeric4.Text <> "") Then If Val(TextBox8.Text) < Val(TextBox9.Text) Then ANTERIORPOSTERIOR.ChartAreas(0).AxisY.Minimum = Val(TextBox8.Text) ANTERIORPOSTERIOR.ChartAreas(0).AxisY.Maximum = Val(TextBox9.Text) Else : MsgBox("VALORES NO VALIDOS EN EJE 'Y'") TextBox8.Text = "" TextBox9.Text = "" End If If Val(Numeric4.Text) > 0 Then X_AN = Numeric4.Text Else MsgBox("VALOR NO VALIDO EN EJE 'X'") Numeric4.Text = "" End If ElseIf (OK_AN.BackColor = Color.Green And (TextBox8.Text = "" Or TextBox9.Text = "" Or Numeric4.Text = "")) Then OK_AN.BackColor = Color.White MsgBox("ASIGNE TODOS LOS VALORES A LOS EJES") End If ' grafica cada x datos solamente para evitar retrazo en la grafica If CONTADOR_DE_DATOS = 10 Then ' datos para monitoreo MONITOREO.M_axial.Text = Format(Val(cadena(9)), "##,###.####") 'Momento de axial MONITOREO.M_Flexion.Text = Format(Val(cadena(10)), "##,###.####") 'Momentos de flexion MONITOREO.M_Rotacion.Text = Format(Val(cadena(11)), "##,###.####") 'Momentos de rotacion MONITOREO.M_Anterior.Text = Format(Val(cadena(12)), "##,###.####") 'Momentos de anterior MONITOREO.TextBox1.Text = Format(A1, "##,###.####") MONITOREO.TextBox2.Text = Format(A2, "##,###.####") MONITOREO.TextBox3.Text = Format(A3, "##,###.####") MONITOREO.TextBox4.Text = Format(A4, "##,###.####") 'Se guardan los datos cuando el boton de "INICIO" en el movimiento automatico esta activo (VERDE) If MOVIMIENTO_AUTOMATICO.INICIAR.BackColor = Color.Green Then If axial.Series(0).Points.Count > X_A Then axial.Series(0).Points.RemoveAt(0) Else ' Graficamos en Chart AXIAL AXIAL.Series("AXIAL").Points.AddXY("", Format(A1, "##,###.##")) End If If FLEXION_EXTENSION.Series(0).Points.Count > X_F Then FLEXION_EXTENSION.Series(0).Points.RemoveAt(0) Else ' Graficamos en los 4 Chart FLEXION_EXTENSION.Series("FLEXION_EXTENSION").Points.AddXY("", Format(A2, "##,###.##")) End If If rotacion.Series(0).Points.Count > X_R Then rotacion.Series(0).Points.RemoveAt(0) Else ' Graficamos en los 4 Chart ROTACION.Series("ROTACION").Points.AddXY("", Format(A3, "##,###.##")) End If If ANTERIORPOSTERIOR.Series(0).Points.Count > X_AN Then ANTERIORPOSTERIOR.Series(0).Points.RemoveAt(0) Else ' Graficamos en los 4 Chart ANTERIORPOSTERIOR.Series("ANTERIOR_POSTERIOR").Points.AddXY("", Format(A4, "##,###.##")) End If 'Guardamos datos Axial Dim axial1 As String If (ARCHIVO_DE_DATOS.D1 = True) Then axial1 = Format(A1, "##,###.##").ToString Else axial1 = " " End If 'Guardamos datos de Flexión-Exension Dim flexion1 As String If (ARCHIVO_DE_DATOS.D2 = True) Then flexion1 = Format(A2, "##,###.##").ToString Else flexion1 = " " End If 'Guardamos datos de Rotación Dim rotacion1 As String If (ARCHIVO_DE_DATOS.D3 = True) Then rotacion1 = Format(A4, "##,###.##").ToString Else rotacion1 = " " End If 'Guardamos datos de Anterior-Posterior Dim anterior1 As String If (ARCHIVO_DE_DATOS.D4 = True) Then anterior1 = Format(A3, "##,###.##").ToString Else anterior1 = " " End If My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, sb.Insert(1, axial1) & sb.Insert(1, flexion1) & sb.Insert(1, rotacion1) & sb.Insert(1, anterior1) & vbCrLf, True) End If 'Reeiniciamos el contador de datos CONTADOR_DE_DATOS = 0 End If End If End Sub
Esto es la parte mas fuerte del programa, recibe una cadena de aprox 33 variables, y cada variable la asigna a su lugar correspondiente..en la ventana principal hace 5 gráficas, y cuenta con otros 7 formularios secundarios ...en realizad a veces se detiene y aparece "(No responde)", y otras se congelan algunas de las gráficas..y cuando abro otro formulario tardan en aparecer sus componentes.
Gracias por su ayuda!!
Mitzuko -.-
-
quiero hacerte una sugerencia para identificar la parte del codigo que tarda mas, pon varios puntos de interrupcion en tu sub AccesoFormPrincipal, digamos un punto de interrupcion cada 6 o 7 lineas de codigo aprox, y vas ejecutando tu codigo presionando F5 asi podras ver entre que punto de interrupcion y otro es donde se tarda mas.