Engineer Blog開発者ブログ

2020.11.4

C#ネタ1.DataGirdViewが遅い

Icons made by Freepik from www.flaticon.com

 

C#で業務アプリを開発する際、ほぼ必ずDataGridViewを使うと思います。

商品一覧、在庫一覧などなど、データベースから取得した値を表示する便利なアイテムではありますが、

FormにDataGridViewを置いて値を設定しただけだと、何だかスクロールが滑らかではありません。(ちらつきが出る)

PCのスペックが低い、データ量が多いとかそういう場合でもなく、「なんだかこれじゃない」感が出てくると思います。

 

そこで、コントロールに対して「DoubleBuffered」というプロパティがありますので、有効にするとスクロール速度が大幅に改善できると思います。

 

例:
 

Type dgvType = 対象のDataGridView.GetType();
PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
pi.SetValue(dgv, flg, null);

 

このプロパティは、コントロールを描画する際にメモリバッファーを使用してくれるので、描画速度が向上します。

 

そのほかにも、PictureBoxやLabel等にも使えますので、ちらちきが気になるときは活用してみるといいかもしれません。

 

注意点として、リモートデスクトップ経由で上記プロパティを使用すると不具合が出るとの報告もあります。

気になる場合や不具合がでた場合、以下のコードでリモート上で実行されているか、確認することができます。

 

System.Windows.Forms.SystemInformation.TerminalServerSession

 

Contact
お問い合わせ

電話番号0120 - 889 - 236
受付時間:平日 9:00-18:00