Visual Basic.NET - ¿Por qué tarda tanto?

 
Vista:
sin imagen de perfil
Val: 33
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Por qué tarda tanto?

Publicado por Carlos (21 intervenciones) el 10/03/2018 23:25:47
Tengo esta sub y el problema es que cuando entra ahí se ralentiza muchísimo la ejecución y no acaba nunca. No es problema que el tamaño del bitmap sea excesivo puesto que, como se ve, sólo tiene un tamaño de 650 * 70 píxeles.

1
2
3
4
5
6
7
8
9
10
Public Sub conteo()
    Dim bmp As New Bitmap(650, 70)
    Dim x As Int16, y As Int16
    For y = 0 To bmp.Height - 1
        For x = 0 To bmp.Width - 1
 
            TextBox1.Text = TextBox1.Text & bmp.GetPixel(x, y).ToString
            Me.Label1.Text = Str(x) & ", " & Str(y)
    Next x, y
End Sub

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 481
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Por qué tarda tanto?

Publicado por Miguel (476 intervenciones) el 11/03/2018 00:39:39
Yo colocaría los textos en una variable antes de pasarlos al TextBox y Label, para evitar 'redibujar' tantas veces...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Sub conteo()
    Dim bmp As New Bitmap(650, 70)
 
    Dim str1 as String = ""
    Dim str2 as String = bmp.Width.ToString() & ", " & bmp.Height.ToString()
 
    Dim x As Int16, y As Int16
    For y = 0 To bmp.Height - 1
        For x = 0 To bmp.Width - 1
             str1 &= bmp.GetPixel(x, y).ToString() & " "
        Next
    Next
 
    TextBox1.Text = str1
    Label1.Text = str2
End Sub


PD: por qué recorrer un Bitmap vacío?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 224
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

¿Por qué tarda tanto?

Publicado por gilman (81 intervenciones) el 11/03/2018 08:32:33
Usa stringbuilder, en operaciones masivas de concatenación de cadenas la mejora de rendimiento es enorme:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Sub conteo()
 
    Dim bmp As New Bitmap(650, 70)
 
    Dim x As Int32, y As Int32
 
    Dim st As New System.Text.StringBuilder
    For y = 0 To bmp.Height - 1
 
        For x = 0 To bmp.Width - 1
 
            st.Append(bmp.GetPixel(x, y).ToString)
 
            'TextBox1.Text = TextBox1.Text & bmp.GetPixel(x, y).ToString
            'para que poner esto al usar stringbuilder no se aprecia y solo ralentiza el
            'codigo
            'Me.Label1.Text = Str(x) & ", " & Str(y)
 
        Next x
    Next y
    TextBox1.Text = st.ToString
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar