通常、自動サイズ変更とダブル バッファリングをオフにすると、DataGridView の作成が高速化されます。DGV ダブル バッファリングが正しくオンになっているかどうかを確認します。
if (!System.Windows.Forms.SystemInformation.TerminalServerSession)
{
Type dgvType = dataGridView1.GetType();
PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
BindingFlags.Instance | BindingFlags.NonPublic);
pi.SetValue(dataGridView1, value, null);
}
WinAPI WM_SETREDRAWメッセージで再描画を無効にすることも役立ちます。
// *** 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();
双方向のデータ バインディングまたは BindingSource によって提供される一部の機能 (フィルター処理など) が必要ない場合は、DataGridView.Rows.AddRange()メソッドを使用して一度に行を追加することを検討してください。
サンプルを含むソース記事へのリンク: http://10tec.com/articles/why-datagridview-slow.aspx