DataGridView + DataBind

WindowsFormsのDataGridViewコントロールをデータバインドで使用した際のパフォーマンスに関して言及したが、すぎもとさんからコメントを頂いた。

あれ?僕は最近ずっとバインドして使っているのですが、1万行くらい出力してもへっちゃらです。Readonlyだからかな・・

人によって、アプリケーションの描画性能(主にフレームレート)に対する感受性がかなり違うのを、経験上解っているので、「へっちゃら」かどうかがどれ位なのかの判断が難しい所だ。DataGridViewを使用した時の描画性能が比較的判り易いシーンを選ぶと

  1. セルを全選択した時や、Form最大化時に全てのセルが再描画されるまでの時間(即座に描画されずいかにも塗絵風)
  2. スクロール時や最大化の描画時に発生するDataGridView全体のちらつき(フリッカ)
  3. データを流し込んだ直後に一瞬無応答になる時間
  4. AlternatingRowsDefaultCellStyleを設定した際の行スクロール時の再描画の時間

こんな所だろうか。いずれも、全てのカラムをデータバインドした状態で一定以上のデータ、例えば10列×100行以上を流し込んだ時に顕著だと感じており、例えReadOnlyにしていたとしても、1万行で軽いというのであれば、私の環境かプログラミング方法に問題があるのかもしれない。(ちなみに、私の例ではReadOnly = trueとしても、描画性能に変化は見られなかった)

また、Virtual Modeで使え、というアドバイスもあろうかと思うが、わざわざプログラミングが煩雑になる方法を最初から選択するのは御免こうむりたいし、そもそも高々100行程度で描画にもたつくのがおかしいといえる。

最初に「人によって感受性が違う」と書いたが、私がフレームレートに対して厳しすぎるのかもしれないことは、お断りしておく。