none
OPTIMIZAR PROGRAMA RRS feed

  • 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.
    miércoles, 17 de agosto de 2016 16:25

Todas las respuestas

  • Sin ver el programa que as hecho es imposible ayudarte...
    miércoles, 17 de agosto de 2016 17:15
  • Es un poco grande,...como puedo adjuntar el archivo?

    Mitzuko -.-

    miércoles, 17 de agosto de 2016 17:56
  • Gracias!!

    Mitzuko -.-

    miércoles, 17 de agosto de 2016 17:56
  • 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

    miércoles, 17 de agosto de 2016 18:35
  • 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 -.-

    miércoles, 17 de agosto de 2016 23:00
  • 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.

    viernes, 19 de agosto de 2016 14:51