DataGridViewListViewのコントロールは、数万行のデータになってくると表示に時間がかかってしまいます。これは、描画処理が大量に発生して遅くなっているようです。

ListViewは、BeginUpdate()~EndUpdate()で描画を止めれば多少なり速くはなりますが、DataGridViewは、SuspendLayout()~ResumeLayout()を行ってもあまり効果がない場合があります。
また、行や列のAutoSizeをAllCellsなど指定すると、すごく遅くなるので行追加時はAutoSizeを切るなどして避けたいところです。

その他にDataGridViewの速度改善を調べてみると、手動で行を追加する方法とDataSauceに引き渡してバインドする方法とで速さに違いが出るそうです。実際に速度に違いがあるのか未検証だったので試してみました。

以下のような4パターンの検証です。

180217_1_datagridview_bind

①(非バインド1)Rows.Add()で1行ずつ追加していくパターン
②(非バインド2)Rows.AddRange()で一気に追加するパターン
③(バインド1)DataTableをバインドするパターン
④(バインド2)独自クラスをバインドするパターン


①(非バインド1)Rows.Add()で1行ずつ追加していくパターン

続きを読む