对于我在使用大型SWT表的RCP应用程序中追逐一段时间的问题,我想分享这个问题。
问题是SWT Table.remove(int start,int end)方法的性能。它提供了非常糟糕的性能 - 在我的Windows XP上每100个项目大约50毫秒。但真正的节目制作者是在Vista和Windows 7上,删除100个项目需要5秒钟!查看表格的源代码显示,此次调用中有大量的窗口事件飞来飞去。这使得窗口系统瘫痪。
解决方案是在这次电话会议中隐藏该死的东西:
table.setVisible(false);
table.remove(from, to);
table.setVisible(true);
这确实很奇怪 - 在XP和XP上删除了500个项目Windows7需要大约15毫秒,这只是打印我使用的时间戳的开销。
很好:)
答案 0 :(得分:5)
而不是table.setVisible(),你应该使用table.setRedraw()。 Control上的这个方法完全是为了在昂贵的更新过程中抑制绘图操作。