C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

DataGirdViewにDataTableをバインドするととても遅い


(過去ログ 7 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■7791 / inTopicNo.1)  DataGirdViewにDataTableをバインドするととても遅い
  
□投稿者/ NZ-000 二等兵(12回)-(2006/10/26(Thu) 20:33:59)

分類:[C#] 


分類:[C#] 

環境:
WindowsXP SP2、VS2005

データベースを扱うアプリケーションの場合、DataTableにデータを格納することがあります。
DataTableでデータを持つことはADO.NETを使う以上必然といった方がよろしいでしょうか。

このDataTableはDataGridViewにバインドすることができ、かなり便利です。
しかし、こと大量にデータを扱う場合には、DataTableをDataGridViewにバインディングすることはナンセンスだと言わざるえません。

なぜならDataSourceへの割り当てがひじょーに遅いからです(加えてレンダリングも遅いのですが今回は触れません)。
このような場合、VirtualModeを使うようですが、参考文献が少ないのが現状で、とっつきにくいです。

それにしても、DataGirdはぜんぜん問題ないのに拡張版のDataGridViewがこんなへぼでは少々納得できません。

といっても始まらないので、少々気づいたことを述べてみます。
それというのは、IListインターフェースを実装するクラスならばバインディングが非常に高速に行えるということです(DataTableに比べて)。

例えば、行を表すクラス(カラムを表すフィールドを持つ)を作成し、DataRowの中身を一度そのクラスのインスタンスに保存します。全ての行の分、インスタンスを作成し、それらをListに追加します。
そのListをDataGridViewにバインドすればいいわけです。

コーディングは増えるし、間に無駄な処理を挟んでいるにもかかわらず、こちらの方がずいぶん速くにバインドできます。

現在はこの方法で対処していますが、やはりスマートとは言いがたいです。
何か良い方法はないでしょうか。

0
引用返信 編集キー/
■7800 / inTopicNo.2)  Re[1]: DataGirdViewにDataTableをバインドするととても遅い
□投稿者/ NZ-000 二等兵(13回)-(2006/10/27(Fri) 08:12:48)

分類:[C#] 

と思ってる矢先に、何度かデバッグ実行を繰り返しただけにもかかわらず、突然Listのバインディングも遅くなってしまいました。
う〜ん、なぞです。

0
引用返信 編集キー/
■7801 / inTopicNo.3)  Re[2]: DataGirdViewにDataTableをバインドするととても遅い
□投稿者/ NZ-000 二等兵(14回)-(2006/10/27(Fri) 08:33:37)

分類:[C#] 

いや、どうやらこれはDataGridViewのAutoSize機能が原因かもと考えるようになりました。

というのも、行や列の幅が検索対象によっては数倍に膨れ上がることがあります。
検索数は変わりませんが、DataGridViewに表示する大きさは数倍になるためかなと思う次第です。ほんとに?・・・

0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -