2

有什么方法可以加快创建 SWT Composites 的速度,即它所花费的时间:

new MyComposite(parent, SWT.NONE)

去完成?

我有几个组合显示在我的 RCP 应用程序中的编辑器中。在调整数据库查询的内容后,我发现创建组合本身现在是主要瓶颈。例如,我们最重要的合成需要 350 毫秒才能创建(在 Windows 7 上)。它完全不包含任何逻辑,所有代码都是由 SWT 设计器生成的。(编辑:所以这段时间完全花在创建 UI 组件上;这个问题与数据访问无关)

您认为这是合理的时间还是很长的时间?

我最重要的合成有四个部分,四个表格查看器,每个最多有 6 列,其中两个隐藏在 CTabFolder 中,6 个文本区域/字段,5 个按钮,两个 ComboViewer 和两个工具栏,总共 12 个工具项。我使用的唯一布局是gridlayout。

我使用 FormToolKit 来创建我的组件。当我不使用它并且不使用图像时,对 Composite 构造函数的调用仍然需要 300ms 以上。

编辑:今天打开的应用程序较少,在 200 毫秒内创建复合运行

使用 gridlayout 或 filllayout 在 Shell 中创建 700 个文本控件需要 640 毫秒我的复合材料中所有控件的确切计数(使用 Composite.getChildren() 递归计数):

Composite -> 9
Text -> 6
Button -> 5
Label -> 5
Table -> 4
Section -> 4
Combo -> 2
ToolBar -> 2 (containing 13 toolitems)
TabFolder -> 1

编辑 2:我运行了 JVisualVM 分析器,发现调用 Section.setExpanded(true) 是我通过简单地将扩展属性设置为 true 来添加的 SWT 设计器需要很多时间。这些调用是不必要的,因为它们已经被扩展了!这将时间减少了 25% 到 150 毫秒。接下来最重要的事情是创建表格查看器,这需要 15% 的时间,然后设置列宽需要另外 8% 的时间。几乎所有这些时间都花在了对 Windows 的本机调用上。在此之后,大部分时间都花在创建部分、合成、组合查看器等......所以我想我无法做太多进一步提高性能的事情。

4

0 回答 0