昔知り合いがDataGridViewを使って作ったプログラムに、不可思議なコードを見つけた。
var max = this.dataGridView1.RowCount;
if(this.dataGridView1.AllowUserToAddRows) max--;
for(var i = 0;i < max;i++) this.dataGridView1.Rows.RemoveAt(0);
全行削除するのに、一行ずつ削除している。見た感じ、行数の2乗オーダーで時間がかかりそうな、いかにも非効率そうなコードだ。
全行削除するなら、以下のように、Clearメソッドで一発である。
dataGridView1.Rows.Clear();
一応実行時間の実測もしたが、一覧表にするのばかばかしいので、64bitのReleaseビルドで1000行削除した結果だけ載せておくと、RemoveAtが367ミリ秒、Clearが20ミリ秒であった。
AllowUserToAddRowsなどのプロパティを変更して確かめたりもしたが、Clearで予期しない動きがあるわけでもなく、わざわざRemoveAtを使って全行削除する意味はなさそうだ。
まあ、以下の実測コードで適当にプロパティとか行数をいじって確かめてみてほしい。
(そもそもDataSourceにコレクションを突っ込んで使うのが本来の使い方だとは思うが)