(sorry for bad English)
I have a big problem with performance of DataGridView when it re-paints.
I'm using a DataGridView to show logs from an external application stream. Messages from the stream come in with a high frequency (less than 1 ms). If I add new row to the DataGridView immediately when each new message comes, the DataGridView doesn't have time to re-paint itself before the next message comes.
A possible solution is to use a queue to collect messages and re-paint DataGridView every 100 ms with messages from queue. This is good but the DataGridView blinks when it auto-scrolls to the last row. (Smooth scroll is disabled)
Can you help me to improve DataGridView performance?
I recently had some slowness issues with DataGridView and the solution was the following code
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);
}
It turns double buffering on for DataGridView objects. Just call DoubleBuffered() on your DGV. Hope it helps.
Edit: I might've gotten this off SO, but I can't search for the original right now so this is just to emphasize that the code isn't mine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With