Delphi 6 Enterpriseを使っております。
1レコードあたり40カラムの素データを、TClientDataSetを使ってTcxGridに描画するコードを書いています。
40カラムそれぞれにイベントハンドラTcxCustomGridTableItemStyles.OnGetContentStyleを用意し、条件を満たした場合にはStyleを変更してセルに色をつけます。
上記の処理の高速化を図りたいと考え、頭を抱えています。
言ってしまえばTClientDataSetまわりのチューニングとでも言うのでしょうか。
Gridの描画の一時停止と再開のためにBeginUpdateとEndUpdateを使用しています。
どのくらい効果があるか分かりませんが、ClientDataSet1.LogChanges := False;も記述してあります。
それでも、1000レコードくらいの素データを読み込むと12秒近くかかってしまうのが現状です。
何か手立てがあればぜひお知恵を拝借したいと存じます。
恐れ入りますが、宜しくお願いします。
データーベースは何をどのようにお使いでしょうか?
TcxGridはカスタムコンポーネントでしょうが、どういう処理をしているか判りません。
また、1画面あたり1000レコードを読み込むのは時間がかかると思います。画面にはそんなに沢山表示しても、扱う人は見えません。
ご回答ありがとうございます。
>データーベースは何をどのようにお使いでしょうか?
CSVファイルを読み込んで、全データをTClientDataSetに代入しています。
「キャッシュに持っている」と表現すればよいのでしょうか。
>TcxGridはカスタムコンポーネントでしょうが、どういう処理をしているか判りません。
TcxGridはDBGridに似た外部コンポーネントです。
TDataSourceを使って、TClientDataSetのデータをTcxGridに表示させています。
>また、1画面あたり1000レコードを読み込むのは時間がかかると思います。画面にはそんなに沢山表示しても、扱う人は見えません。
なるほど!
現状では「画面の高さ=30レコード分」ですので、
画面をスクロールしない限り、一度に30レコードしか見れません。
描画が必要なものだけVisibleにするような書き方をすれば解決できそうです…。
>CSVファイルを読み込んで、全データをTClientDataSetに代入しています。
この部分で時間がかかっているのですか?
# このとき代入するまえに、ClientDataSet1.DisableControlsメソッドを呼び出し、
# 完了後、ClientDataSet1.EnableControlsメソッドを呼び出してますか?
それとも、
>40カラムそれぞれにイベントハンドラTcxCustomGridTableItemStyles.OnGetContentStyleを用意し、
>条件を満たした場合にはStyleを変更してセルに色をつけます。
これの影響で時間がかかっているのですか?
ちなみに試したところ、
MyBaseで、xmlファイル(1000レコード・40カラム)をLoadFromFileメソッドで読み込んでも、
TClientDataSet - TDataSource - TDBGrid
で、1秒以内で表示されます。
igy様
回答してくださりありがとうございます。
># このとき代入するまえに、ClientDataSet1.DisableControlsメソッドを呼び出し、
># 完了後、ClientDataSet1.EnableControlsメソッドを呼び出してますか?
呼び出していませんでした…。
書き加えたところ、処理速度が格段に向上しました!
ありがとうございました。
解決時の"チェック"を忘れていました。
ツイート | ![]() |