Thread Rating:
  • 423 Vote(s) - 2.92 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RecordGridの縦スクロールが遅いんですが…
07-20-2011, 02:27 PM,
#1
RecordGridの縦スクロールが遅いんですが…
何か良い知恵はないでしょうか。

当方、RecordGridを使用してデータを一覧表示しているのですが、
レコードの件数自体は100件~200件程度なんですが、列数が200列くらいあります。
恐らくこの200列がいけないような気がするんですが…

なぜ縦スクロールが遅くなるのか、改善方法を御存知の方は
御教示頂ければと思います。

宜しく御願いします。
Reply
07-27-2011, 08:43 AM,
#2
RE: RecordGridの縦スクロールが遅いんですが…
行の方は表示部分のみ作成描画しているのに対し、列は見えない部分まで作って保持してるみたいですね。
それで遅いんじゃないでしょうか。
改善方法は、やはり列を減らすとか…。
Reply
07-27-2011, 10:46 AM,
#3
RE: RecordGridの縦スクロールが遅いんですが…
yosuga様、返信有り難う御座います。

当方でも調べたことを後進のために記述しておきます。
yosuga様の言うように、RecordGridは表示されていない【行】については
グラフィカルなオブジェクトとしては保持していないようです。
表示されている行で、見えていない【列】(横スクロールすれば見える列)に関しては
オブジェクトとして保持されているようです。

ここで言う、グラフィカルなオブジェクトとは、RecordGridCellのことを意味し、
RecordGridCellにRecordSetの持つレコードのデータを適切にひもづけ
表示しています。
では、RecordGridがスクロールされ、今まで表示されていなかった行が
表示されるようになった際は、いままで表示されていたデータのひもづけを外し、
RecordGridCellが使い回しされ、表示されることとなったレコードにひもづけを
行い、再度データを表示しています。
このRecordGridCellオブジェクトの使い回しによって、大量のレコード数が合ったとしても
表示されているレコード数分しかRecordGridCellオブジェクトは作成されず、
メモリの使用を抑えているということになります。

また、当方ではRecordGridCellを継承してカスタマイズされたセルを使用しています。
その中のrefresh-dataメソッドをオーバーライドして処理を行っています。
このRecordGridCell.refresh-dataメソッドは、上記のRecordGridがスクロールされる際などに
表示するレコードのひもづけ、データの表示を行うメソッドです。
つまり、スクロールした際は、RecordGridが保持しているRecordGridCellの数分refresh-dataメソッドが
実行されます。

今回の場合、レコード数はそこまで大量ではないのですが、列数が多くあるため、
見えていない列のRecordGridCellオブジェクトも保持しており、
その分だけ、RecordGridCellのrefresh-dataメソッドが多く実行されます。
また、refresh-dataメソッドのオーバーライドして追加した処理も実行されるため、
その分もパフォーマンスに影響を与えたようです。

現状のRecordGridの仕様はこのようなので、やはり、yosuga様の言うように列数を減らすのが
一番良い方法のように思えます。
有り難う御座いました。

Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('138')