Java 改进eclipseswt性能

Java 改进eclipseswt性能,java,eclipse,performance,swt,Java,Eclipse,Performance,Swt,有哪些方法可以加快创建SWT复合材料,即所需时间: new MyComposite(parent, SWT.NONE) 完成 我的RCP应用程序中显示了几个组合。在对数据库查询的内容进行调优之后,我发现创建组合本身现在是主要的瓶颈。例如,我们最重要的组合需要350毫秒才能创建(在Windows 7上)。它完全不包含任何逻辑,所有代码都是由SWT设计器生成的。(编辑:所以这段时间完全花在创建UI组件上;这个问题与数据访问无关) 你认为这是一个合理的时间还是一个很长的时间 我最重要的组合有四个部分

有哪些方法可以加快创建SWT复合材料,即所需时间:

new MyComposite(parent, SWT.NONE)
完成

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

你认为这是一个合理的时间还是一个很长的时间

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

我使用FormToolKit创建我的组件。当我不使用它和不使用图像时,对复合构造函数的调用仍然需要超过300毫秒

编辑: 如今,开放的应用程序越来越少,在200毫秒内创建复合运行

使用gridlayout或filllayout在Shell中创建700个文本控件需要640ms my composite中所有控件的精确计数(使用composite.getChildren()递归计数):


编辑2:我运行了JVisualVM profiler,发现对Section.setExpanded(true)的调用需要花费大量的时间,我通过SWT设计器简单地将expanded属性设置为true来添加它。这些呼叫是不必要的,因为它们已被扩展!这将时间缩短25%至150毫秒。下一个最大的任务是创建表查看器,它占用15%的时间,然后设置列宽,占用另外8%的时间。几乎所有这些时间都花在对Windows的本机调用上。在这之后,大部分时间都花在创建截面、复合材料、组合查看器等上。。。因此,我想我无法进一步提高性能。

350毫秒是永恒的,不应该花那么长时间。您的TableViewer是如何填充的?它们连接到数据模型,这可能会导致延迟。我想知道您是如何从数据库加载数据的。您应该使用Eclipse作业/线程池来加载而不是阻止UI线程。SWT UI事件处理发生在我的系统(GTK)上的UI线程(单线程模型)上,我需要创建700个组件(文本输入字段)以花费300毫秒。您的组合中有多少组件?-我正在使用org.eclipse.swt_3.7.0.v3735b.jar(与eclipse RCP 3.7捆绑)-我提到的时间仅用于创建swt控件,它不包括从数据库加载数据,也不包括填充控件。因此,根本没有设置表查看器输入。(我使用数据绑定将其与UI完全分离)现在我想起来了,我的java user.home被设置为网络共享,我记得当我没有连接SWT时。我现在将验证这一点。
Composite -> 9
Text -> 6
Button -> 5
Label -> 5
Table -> 4
Section -> 4
Combo -> 2
ToolBar -> 2 (containing 13 toolitems)
TabFolder -> 1