RecordGrid のパフォーマンスについて - Printable Version +- Curl Global Community (https://communities.curl.com) +-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1) +--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2) +--- Thread: RecordGrid のパフォーマンスについて (/showthread.php?tid=232) |
RecordGrid のパフォーマンスについて - umemura - 08-24-2011 大量データを高速に表示できる RecordGrid ですが、 それでもカラムの数が膨大になってくると、スクロールや描画がモタつくことがありますよね。 とくにRecordGridCell などを継承して、RecordGridColumn のscell-spec に適用したカスタムセルを利用すると その違いが顕著になるような気がしています。 少しでもパフォーマンスを上げたいときは、どんなことに気をつければいいのでしょうか。 RE: RecordGrid のパフォーマンスについて - umemura - 08-24-2011 もしそのセル(カラム)がIME入力を必要としないならば、 input-method-enabled? = false とすると、 矢印キーでのセル間のフォーカス移動がすばやくなるようです。 これは、セルが入力状態になるたびにIMEのON/OFFが切り替わっているのをスキップするためです。 RE: RecordGrid のパフォーマンスについて - umemura - 08-24-2011 RecordGrid のパフォーマンスは、主に各セル(カラム)の refresh-data メソッドの処理に依存するようです。 そのため、カスタムセルを利用する際、継承先のクラスでは、 なるべくこのメソッド内の処理を簡潔にすることがパフォーマンス向上の近道のようです。 また、データが存在せず、再描画しなくてもよいカラムなどがあれば、 refresh-data のなかで{supre.refresh-data} を呼ばないようにスキップすることで、 全体の描画速度が向上すると思います。 セルのプロパティにある possibly-displayed? を参照して下記のような記述をすると、 体感ですが、若干スクロールのスピードが上がったような気がしないでもなくもないです。 Code: {if self.possibly-displayed? == true then RE: RecordGrid のパフォーマンスについて - 森口 慶紀 - 09-02-2011 (08-24-2011, 04:23 PM)umemura Wrote: もしそのセル(カラム)がIME入力を必要としないならば、どうやらIMEツールバーによってフォーカス移動の速度が変わる様です。 大量カラム、大量データを持たせたRecordGridにて速度の検証をしてみましたが、 Microsoft IME2003ではinput-method-enabled? = falseをしなくてもフォーカス移動の遅延はほとんどありませんでしたが、 Microsoft IME2007ではinput-method-enabled? = falseをしないとかなりフォーカス移動の遅延が見受けられました。 これはIMEツールバーの種類によって、IMEのON/OFF速度が異なるからなのでしょうか RE: RecordGrid のパフォーマンスについて - Yuhki - 09-05-2011 (08-24-2011, 04:23 PM)umemura Wrote: input-method-enabled? = false とすると、 (09-02-2011, 07:18 PM)森口 慶紀 Wrote: どうやらIMEツールバーによってフォーカス移動の速度が変わる様です。ちなみにセルの上下移動(↑or↓)のときに大きく影響がでるようですね。 RE: RecordGrid のパフォーマンスについて - Yuhki - 09-05-2011 (08-24-2011, 04:15 PM)umemura Wrote: 少しでもパフォーマンスを上げたいときは、どんなことに気をつければいいのでしょうか。私は以下を気をつけます。 ・設計段階でカラム数(表示している列数)を多くならないようにする ・継承したRecordGridCellクラスのrefresh-dataメソッドやformat処理に以下のような処理を書かない →Recordの値をセットする(RecordSetEventイベントが発生してしまうため) →Recordを検索する(RecordSet.selectなど) ・表示のみのカラムであればStandardFixedStringCell(またはそれを継承したクラス)を使用する また思い出したら追記します。 RE: RecordGrid のパフォーマンスについて - fukuta - 09-08-2011 影響が大きい割によく忘れられがちなのは、プログラムからレコードの変更、追加、削除などを行うときに batch-events?=true を指定しないこと。これは痛い。 Code: {with record-set.batch-events? = true do 厳密には、すでにRecordGridに関連づいているRecordSetに対して複数の変更(Recordに値をセットするとか、RecordGrid.appendするとか)を同時に行う場合に必須です。使いどきの判断が難しいと思う場合はなにも考えずに毎回これをかきましょう。イディオムです。 RE: RecordGrid のパフォーマンスについて - 森口 慶紀 - 09-09-2011 グリッドの表示領域が増えれば増えるほど、 画面に表示されるデータ(セル)が多くなる程、 描画に時間がかかる為、スクロールが遅くなってしまいますよね RE: RecordGrid のパフォーマンスについて - umemura - 01-06-2014 RecordGrid.batch-events?=true を指定するのとしないのとでは、かなりパフォーマンスに影響がありますね。 また、別スレッドの「セル単位での色指定」でも記載しましたが、 RecordGridCell.refresh-data の中で、このbatch-events?を参照するようにすると、 さらに全体のパフォーマンスが向上しました。 Code: {curl 8.0 applet} |