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