DataGridViewのセル描画性能

描画性能というのは、人によって感じ方が違うのが前提だが、それでも書いておこうと思う。

データロード時の性能の不満は、私のバグを修正することでほぼ解消されたが、元々問題にしていたセルレンダリング自体の性能はいろいろ試すも、今の所、満足できる域には達していない。

どうもデータバインドが絡むと本質が見えなくなるので、ここで問題を単純にしよう。

単純なWindowsFormsアプリケーションのソリューションを作成して、Form上にはDataGridViewを一つだけ貼る。そしてDataGridViewはデータバインドの有無に関わらず、10個の列(1列毎に10〜20文字を格納する)をデザイナで作成し、その後以下のようなコードで、500行程度をDataGridViewに流し込む。

string text = new string
  { "カラム1用のテキスト。何でもよいが桁数は必要"
   ,"カラム2用のテキスト。何でもよいが桁数は必要"
    :
    :
   ,"カラム10用のテキスト。何でもよいが桁数は必要"};
for (int i = 0; i < 500; i++)
{
    this.dataGridView1.Rows.Add(text);
}

この状態でFormを表示した後にSVGA以上の解像度で最大化するか、セルのうち500個程度が見える状態で

・フォームが表示される時の、DataGridViewのセル全ての再描画
・フォームを一旦最小化して、最大化した時の見えているセル全ての描画
・セル選択モード時、キーボードやマウスで選択矩形を拡大、縮小した時のセルの再描画
・スクロールバーのサムを掴んで、上下に高速にスクロールした時のセルの描画

これらの操作全てにおいて、画面の描画にセルの描画が追いつかず、パラパラとセルがゆっくりと再描画される様を感じないだろうか。私はそれを強く感じる。そしてそれらが非常に不満だ。あと、大量のセルを再描画する際に発生するフリッカ(画面のちらつき)も非常に不愉快だ。

10×500=5000個のセルを扱う訳だが、これは業務アプリケーションを考えたとき、非現実的な規模だろうか。DataGridViewはどうもこの辺の規模で既に限界にあるように見える。
古のVB2.0で使用していたSpread/VBXという、Farpoint社製のVBXの発売はもう10年近く前だが、数々の制約があったWin16(32)環境であっても、描画性能はDataGridViewより上だったと思う。