visual studio ejemplos .net winforms datagridview repaint paint

.net - studio - datagridview c# ejemplos



¿Cómo mejorar el rendimiento de pintura de DataGridView? (6)

(perdón por mal inglés)

Tengo un gran problema con el rendimiento de DataGridView cuando vuelve a pintar.

Estoy usando DataGridView para mostrar los registros de una secuencia de aplicación externa. Los mensajes de la transmisión entran con una frecuencia alta (menos de 1 ms). Si agrego una nueva fila a DataGridView inmediatamente cuando aparece cada nuevo mensaje, DataGridView no tiene tiempo para volver a pintarse antes de que llegue el siguiente mensaje.

Una posible solución es usar una cola para recopilar mensajes y volver a pintar DataGridView cada 100 ms con los mensajes de la cola. Esto es bueno, pero DataGridView parpadea cuando se desplaza automáticamente a la última fila. (El desplazamiento suave está desactivado)

¿Me puede ayudar a mejorar el rendimiento de DataGridView ?


Recientemente tuve algunos problemas de lentitud con DataGridView y la solución fue el siguiente código

public static void DoubleBuffered(this DataGridView dgv, bool setting) { Type dgvType = dgv.GetType(); PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); pi.SetValue(dgv, setting, null); }

Activa el doble almacenamiento en búfer para objetos DataGridView . Simplemente llame a DoubleBuffered() en su DGV. Espero eso ayude.

Editar: Podría haberlo sacado TAN, pero no puedo buscar el original ahora, así que esto es solo para enfatizar que el código no es mío.



Al trabajar con grandes cantidades de datos, el control DataGridView puede consumir una gran cantidad de memoria en la parte superior, a menos que lo use con cuidado. En clientes con memoria limitada, puede evitar algunos de estos gastos indirectos al evitar las funciones que tienen un alto costo de memoria.

También puede administrar algunas o todas las tareas de mantenimiento y recuperación de datos usando el modo virtual para personalizar el uso de memoria para su escenario. Más detalles puedes visitar dapfor. com


La solución limpia sin reflexión es:

//http://.com/questions/4255148/how-to-improve-painting-performance-of-datagridview public class DataGridViewDoubleBuffered : DataGridView { public DataGridViewDoubleBuffered() { DoubleBuffered = true; } }


utilizo esta solución y vi un poco fijo.

Se usa reflexión, así que importe esto también en el código

using System.Reflection; typeof(DataGridView).InvokeMember("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty, null,this.dataGridView1,new object[] { true });