您将如何在 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());
.....
}
});
在我的计算机上绘制 20k 条记录大约需要 20 秒。我在 Windows 中看到的最大性能问题是由 SWT 在创建新表项并填充文本时发送的大量本机窗口消息引起的。我为此找到了很好的解决方法 - 在填充之前隐藏表格,然后在完成后显示它。只需在循环之前调用 table.setVisible(false) 并在循环之后调用 table.setVisible(true) 就会产生奇迹 - 速度提高了六七倍!
我想加快速度。你有什么建议?另外,我想知道隐藏小部件的这个技巧如何在 SWT(又名 Linux)的非 Windows 实现上起作用?