none
Mejorar performance en combobox enlazado

    Pregunta

  • Hola a todos !! Estoy teniendo problemas de perfomance al momento de cargar un combo. Resulta que tengo un ComboBox, el cual se debe llenar con un listado de Clientes (hay unos 10.000 aproximadamente) El combo se llena bien, sin problemas. La unica contra es que demora demasiado en cargar.

    Este es el metodo que utilizo para cargar el combo:

    Public Sub cargarCombo(ByRef combo As ComboBox, ByVal consulta As String, ByVal valueMember As String, ByVal displayMember As String)
            Dim dt As New DataTable
            m_connection.ConnectionString = g_StringConexion
            m_comando = New SqlCommand(consulta, m_connection)
            If conectarBBDD() = True Then
                Try
                    dt.Load(m_comando.ExecuteReader())
                    combo.DataSource = dt
                    combo.ValueMember = valueMember
                    combo.DisplayMember = displayMember
                Catch ex As Exception
                    MessageBox.Show("Error al operar con la base de datos" & vbCrLf & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    
                End Try
                m_connection.Close()
            End If
        End Sub
    Existen formas de mejorar la performance ? Gracias !!! Saludossssssssss

    miércoles, 21 de diciembre de 2016 13:26

Respuestas

  • Ganarías algo si en lugar de usar un DataTable y luego filtrar por ValueMember y DisplayMember utilizases una clase que contenga dos propiedades para el valor y el texto, y un override de ToString que muestre el texto. Si cargas el Combo con instancias de esa clase, será un poco más eficiente que cargarlo con un datatable. Pero tampoco esperes una mejora espectacular. Realmente lo que deberías hacer es cambiar el diseño y usar otro tipo de control; un combo no es adecuado para seleccionar entre 10000 valores, no solo por lentitud sino porque no es amistoso para el usuario.
    • Marcado como respuesta rlavisse miércoles, 21 de diciembre de 2016 13:57
    miércoles, 21 de diciembre de 2016 13:55