Optimizar carga de datos en datagridview c sharp

Publicado en 'Programación' por joel094, 22 Dic 2015.





  1. joel094

    joel094 Miembro frecuente

    Registro:
    14 Oct 2012
    Mensajes:
    213
    Likes:
    7




    Buen día a todos tengo un pequeño problema lo que pasa es que en la visualización de un datagridview con una cantidad de datos considerable (500 y creciendo) el datagridview demora demasiado en cargar si alguien tuviese otro código le agradeseria que lo deje aquí el odio actual que uso es el siguiente.

    Código:
     SqlConnection conexio = Conexion.ObtnerCOnexion1();
                String cadenaSQL = "SELECT prfnum as Prefactura,pacnam AS Paciente,feccre as Fecha from NuevaPrefactura order by prfnum";
                SqlDataAdapter adptador = new SqlDataAdapter(cadenaSQL, conexio);
                DataSet ds = new DataSet();
                adptador.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0];
    
     


  2. gnox

    gnox Miembro maestro

    Registro:
    3 Ene 2013
    Mensajes:
    792
    Likes:
    252
    Debes revisar el propósito de tu visualización (requerimiento), ya que ningún usuario se va a poner a leer en pantalla un volumen alto de registros, así que o agregas filtros de búsqueda para cambiar ese "from tabla " por un "from tabla where <filtro>" (acuerdate de aplicar los indices que se necesiten), o simplemente diseñales un listado (reporte) en crystal o otra herramienta. Si aun así el usuario quiere ver por pantalla sus miles de registros aplica paginación donde le vas enviando de cuanto en cuanto quieres ver, mas optimizado si lo haces de lado servidor aka BD.
    https://msdn.microsoft.com/en-us/library/tx1c9c2f(v=vs.110).aspx
     
    A joel094 le gustó este mensaje.
  3. joel094

    joel094 Miembro frecuente

    Registro:
    14 Oct 2012
    Mensajes:
    213
    Likes:
    7
    Justo lei esto de paginacion pero vi otros usuarios que decian que l uso de dataset agilizaba el proceso y todo eso pero bien utilizare esto que me indica se agraece saludos!
     
  4. zlader

    zlader Miembro maestro

    Registro:
    30 Oct 2009
    Mensajes:
    565
    Likes:
    47
    Tengo la duda si lo que te demora es la conexion a la BD o la computadora que demora en mostrar, para un select tan simple no deberia haber demora, si no hay demora al recuperar los datos, tienes que colocar filtros por defecto para que la cantidad de datos a mostrar sea menor.

    Supongo que no aplicas formatos fila x fila del datagrid verdad? que eso retrasa todo mucho mas.
     
  5. eduar2083

    eduar2083 Miembro frecuente

    Registro:
    26 Jul 2011
    Mensajes:
    224
    Likes:
    46
    La invocación a la BD es lo que toma mayor tiempo y en ocasiones, la apertura de la conexión tarda más que la propia consulta y consume bastante cpu. En situaciones donde se necesita conectar constantemente a la BD se suele utilizar Pool de conexiones.
    No entiendo a qué te refieres con filtros por defecto.

    Creó que te refieres al formato CSS que se aplica a filas pares/impares, si es así, eso es trabajo del motor de renderizado que implementa el navegador (hablando de un entorno web)

    Respecto a la duda de joel094, si sólo vas a obtener un conjunto de resultados, bastaría con utilizar un objeto DataReader. Por otro lado sería ideal que postrarás el código del método estático Conexión.ObtnerCOnexion1.

    Saludos.
     
  6. TheRoot

    TheRoot Miembro frecuente

    Registro:
    8 Ene 2015
    Mensajes:
    234
    Likes:
    13
    Todo lo que te han comentado es cierto, pero pongo mi granito de arena ademas, si estas usando T-SQL (SQL de microsoft) nunca pongas un query en el codigo primero porque es de difcil mantenimiento, es una mala practica y segundo porque no es optimo, el T-SQL (oracle y en verdad la mayoria de motores SQL) "compilan las sentencias" para poder ejecutarlas optimamente, asi sea una sentencia simple, esta es compilada si usaras Store Procedures este se compilaria solo una vez y seria lo mas optimo.
    Por el bien de tu carrera profesional ordena tu codigo, sigue la premisa de las tres capas lo mas que puedas (no es la santa biblia pero ayuda a la larga) y por ultimo si usas T-SQL coloca al final del nombre de tu tabla la palabra WITH(NOLOCK) si la tabla no es actualizada constantemente, investiga un poco sobre esta sentencia.
    Saludos