Saltar al contenido

Rendimiento lento al llenar DataGridView con datos de gran tamaño

Esta noticia fue probado por especialistas para que tengas la seguridad de la exactitud de nuestra esta división.

Solución:

Si tiene una gran cantidad de filas, como 10 000 o más, para evitar pérdidas de rendimiento, haga lo siguiente antes del enlace de datos:

dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing; 
// or even better, use .DisableResizing. Most time consuming enum is DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders

// set it to false if not needed
dataGridView1.RowHeadersVisible = false;

Después de vincular los datos, puede volver a habilitarlos.

Asegúrese de no cambiar el tamaño de las columnas automáticamente, mejora el rendimiento.

es decir, no hagas esto:

Datagridview.Columns[I].AutoSizeMode = DataGridViewAutoSizeColumnMode.xxxxx;

Por lo general, desactivar el tamaño automático y el almacenamiento en búfer doble ayudan a acelerar el llenado de DataGridView. Compruebe si el búfer doble de DGV está activado correctamente:

if (!System.Windows.Forms.SystemInformation.TerminalServerSession)

  Type dgvType = dataGridView1.GetType();
  PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
    BindingFlags.Instance 

Deshabilitar el redibujado con el mensaje WinAPI WM_SETREDRAW también ayuda:

// *** API Declarations ***
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
private const int WM_SETREDRAW = 11;

// *** DataGridView population ***
SendMessage(dataGridView1.Handle, WM_SETREDRAW, false, 0);
// Add rows to DGV here
SendMessage(dataGridView1.Handle, WM_SETREDRAW, true, 0);
dataGridView1.Refresh();

Si no necesita el enlace de datos bidireccional o algunas funciones proporcionadas por BindingSource (filtrado, etc.), puede considerar agregar filas de una sola vez con el método DataGridView.Rows.AddRange().

El enlace al artículo fuente con la muestra: http://10tec.com/articles/why-datagridview-slow.aspx

Comentarios y puntuaciones del artículo

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *