DataGridViewの表示を早くしたい


初段  2008-07-13 21:35:41  No: 144920  IP: 192.*.*.*

Dim Adapter As OleDbDataAdapter
Dim Table As New DataTable

If Ole接続(oleCon1) = False Then Exit Sub 
Adapter = New OleDbDataAdapter("SELECT * FROM M会社", oleCn)
Adapter.Fill(Table)
'▼値の表示
DataGridView1.DataSource = Table

Access.MDBのデータで
3万件位あるのですが、DataGridViewで表示するだけで
時間が掛かります。早く表示する方法はないものでしょうか?

編集 削除
 2008-07-14 09:09:54  No: 144921  IP: 192.*.*.*

あまり自信は無いけど、DataGridViewを一時的に非表示
(Visible = False)にしておいて内部的に表示処理を行い、
それが完了した時点でVisible = Trueに戻すと、
DataGridViewの「描画処理は」速くなるかもしれない
ただ根本的な問題として…3万件もあったらMDBじゃ
遅いような気もするのだが
(Oracleなんかだと Select * は少し遅くなるとか
  いろいろノウハウがあるみたいだけど、MDBは
  そのレベルの話はわからん
  ただ、MDBだと(テーブルの?)件数が5桁になったぐらいで
  速度がガクンと落ちるとかいう噂は聞いた)

編集 削除
やじゅ  2008-07-14 12:50:33  No: 144922  IP: 192.*.*.*

そもそも3万件を表示しても全て見ないでしょ
だとしてら、ページ方式にするなりして、
1,000件ずつ表示するとか仕様を変更すべき

編集 削除
初段  2008-07-14 19:58:27  No: 144923  IP: 192.*.*.*

Visible = Falseは変わりはないようですね。
抽出処理の
Adapter = New OleDbDataAdapter("SELECT * FROM M会社", oleCn)
が遅いようです。
mdbだと即表示できます。
どうしようも無いのかな?
DataGridViewってこんなに遅いものですか?

編集 削除
魔界の仮面弁士  2008-07-14 20:23:52  No: 144924  IP: 192.*.*.*

> Adapter = New OleDbDataAdapter("SELECT * FROM M会社", oleCn)
> が遅いようです。
遅いのは、OleDbDataAdapter → DataTable 化の処理だと判明したのに

> DataGridViewってこんなに遅いものですか?
何故それが、DataGridView の責任に転嫁されてしまうのでしょうか?


で、Access での表示であっても、レコード末尾までの表示は
多少なりとも時間がかかります。先頭数千件程度までは、
すぐにロードされるかも知れませんけれどね。(データ量/回線速度等に依存)


> どうしようも無いのかな?

(案1) 表示件数を減らすために、ページング処理などを実装する。

(案2) OleDbDataReader + BackgroudWorker の ProgressChanged を用いて、
  読み取りが完了した分から、順次、表示用の DataTable に転記するようにする。

編集 削除
我龍院  2008-07-15 08:59:10  No: 144925  IP: 192.*.*.*

もともとAccessには大きなテーブルを開いたとき、現ページだけを(実際は2ページ
くらい読み込んでいるのかも知れない)読み込んで、スクロールに従って新しいデーター
を読み込むモードがありますよね、「just-in-timeデータローディング」と言うようです。
「just-on-time」で無いのがなんとも面白い。

そんなことをする為の解説が
http://msdn.microsoft.com/en-us/library/ms171624.aspx
コードが
http://msdn.microsoft.com/en-us/library/ms171625.aspx
大体こんなことが、
「Just-In-Time データーローディングを用いたバーチャルモードのDataGridView Controlへの実装」
DataGridView Controlへバーチャルモードを実装する理由は必要に応じてデーターを検索することにあり、
これはjust-in-timeデータローディングと呼ばれる。
たとえば非常に大きなテーブルを操作していて、単にデーター表示に必要なデーター検索の為のスタートアップ
遅延を避けたいと考えるなら、又は新しい行をスクロール時のみ表示したいと思うなら。
もしユーザーのPCが限られたメモリーしか実装していないとしたら、又は新しいデーターをデーターベースから検索
する時不要なデーターを破棄しようと思ったら......

編集 削除
初段  2008-09-06 20:54:26  No: 144926  IP: 192.*.*.*

↑の説明ありがとうございます。
でもAccessは一旦、最後まで表示しきると、上へスクロールは
早くなります。VB.NET はじめてなのですが
DataGridViewとかこんなに表示や設定が面倒だと、Accessの
方が使いやすいです。
DataGridView  ってページ表示の形式で使用してるのですか?
なにかサンプルがあれば・・いいのですが?

編集 削除
初段  2008-09-06 20:54:27  No: 144927  IP: 192.*.*.*

↑の説明ありがとうございます。
でもAccessは一旦、最後まで表示しきると、上へスクロールは
早くなります。VB.NET はじめてなのですが
DataGridViewとかこんなに表示や設定が面倒だと、Accessの
方が使いやすいです。
DataGridView  ってページ表示の形式で使用してるのですか?
なにかサンプルがあれば・・いいのですが?

編集 削除
Sigma  2008-09-06 22:13:45  No: 144928  IP: 192.*.*.*

>DataGridViewとかこんなに表示や設定が面倒だと、Accessの
>方が使いやすいです。

これは当然だと思いますよ。
Accessはデータベース(もどき)に特化していますから。

VBを採用するメリットが、前述されているデメリットを下回る
ようであれば、システムをAccessで構成するようなアプローチ
がいいと思います。

編集 削除
初段  2008-09-06 22:41:43  No: 144929  IP: 192.*.*.*

DataGridViewの処理が件数少なくても重い・・・
VBを採用するメリットってなんでしょうか?
..............................................................
そんなことをする為の解説が
http://msdn.microsoft.com/en-us/library/ms171624.aspx
コードが
http://msdn.microsoft.com/en-us/library/ms171625.aspx
よくわかりません
実装された方、コードをお願いします

編集 削除
 2008-09-07 11:54:37  No: 144930  IP: 192.*.*.*

ちょっと質問がいろいろと...

> 3万件位あるのですが、DataGridViewで表示するだけで
> 時間が掛かります。早く表示する方法はないものでしょうか?
ちなみにどれくらい掛かりますか?
1/10(3,000件くらい)ならどれくらいに短くなりますか?
また,時間が掛かっているのはどこですか?
(描画?それともDBからのロード?)
この辺の調査はいたしましたでしょうか?

> DataGridViewの処理が件数少なくても重い・・・
"DataGridViewの処理"が開発者が手をつけられなく,
どうしようもないものならあきらめるしかないですね.

> よくわかりません
> 実装された方、コードをお願いします
よくわからなかったらコードをお願いするところが分かりません
こうですか><;;
みたいな.

リンク先の実装されたコードはもう試したのでしょうか?
質問者の意図が全体的によくわかりません

編集 削除
 2008-09-07 21:55:42  No: 144931  IP: 192.*.*.*

>VBを採用するメリットってなんでしょうか?
そりゃアンタ、まずはAccessだと基本的にAccessのデータしか扱えないからだろう
リンクでもすりゃ、確かに他のDBも扱えるけど、
そこまでAccessにこだわる理由も無い

それにVBの方がGUI的にも格段に汎用性が高いし
DBを知らないエンドユーザにAccessの表を直接いじらせるのは危険だし

個人的余談:VBに慣れた身にとってはAccessVBAは何かキライ…

編集 削除
初段  2008-09-14 21:57:44  No: 144932  IP: 192.*.*.*

そんなことをする為の解説が
http://msdn.microsoft.com/en-us/library/ms171624.aspx
コードが
http://msdn.microsoft.com/en-us/library/ms171625.aspx
私には難しくて実装できません><!!
なので実装した物をお願いします。    。><。

編集 削除