SWT テーブルに大量の行を表示するにはどうすればよいでしょうか? 巨大とは、20K 行、20 列を超えるものです。なぜそんなに多くのデータを表示する必要があるのか と聞かないでください。それは重要ではありません。ポイントは、エンドユーザーが待って退屈しないように、できるだけ速く動作させる方法です。各行にはオブジェクトのインスタンスが表示され、列はそのプロパティ (一部) です。JFace コンテンツ/ラベル プロバイダー パターンを使用することを考えましたが、テーブルにデータを直接ヒットするよりもさらに遅くなるのではないかと心配しています。これはそれがどのようになるかです:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
List<MyObject> objects = model.getViewData();
for(MyObject object: objects){
TableItem item = new TableItem(table, SWT.NULL);
item.setImage(0, img1);
item.setBackground(color1);
item.setText(0, object.getProperty0());
item.setText(1, object.getProperty1());
item.setText(2, object.getProperty2());
.....
}
});
私のコンピューターで 20,000 レコードを描画するには、約 20 秒かかります。私が Windows で見た最大のパフォーマンスの問題は、新しいテーブル項目が作成され、テキストが取り込まれたときに、SWT によって送信される信じられないほどの量のネイティブ ウィンドウ メッセージによって引き起こされます。これに対する優れた回避策を見つけました-データを入力する前にテーブルを非表示にし、完了したら表示します。ループの前に table.setVisible(false) を呼び出し、ループの後に table.setVisible(true) を呼び出すだけで、速度が 6 ~ 7 倍になります。
もっとスピードアップしたい。あなたは何を提案しますか?また、ウィジェットを非表示にするこのトリックが、SWT (別名 Linux) の Windows 以外の実装でどのように機能するのだろうか?