当Graphics2D.fill()可以在SWT中工作慢10倍?

时间:2014-03-23 19:56:03

标签: java swing graphics swt awt

我正在研究这个问题,Piccolo2D图形在SWT桥内部运行时效果要慢得多。

最后我发现,代码运行得慢得多,就是对Graphics2D.fill()方法的调用。在SWT桥的情况下,它的工作速度慢了10倍,在普通的Swing中。

可能的原因是剪裁区域。

其他可能的原因是什么?

怎么可能看到原因是裁剪? Graphics2D.getClipBounds()的结果在两种情况下都是相同的,但它被记录为“用户”剪切区域。是否可以看到“设备”剪辑区域?

1 个答案:

答案 0 :(得分:0)

SWT变得比Swing慢,因为它使用代理到OS小部件。问题是OS部分(非托管代码)经常与Java代码(托管代码)通信。这种过渡' (设法为非托管而相反)很慢,因为JVM必须在系统上设置标志,以说明程序是否可以访问(内存,......)。

Swing主要使用托管代码'部分,因此可以从例如JIT优化中受益。

另一方面,SWT小部件给人一种更好的感觉,因为操作系统管理绘图,悬停状态等等,即使Java代码有点滞后。

以为,Piccolo2D使用轻量级小部件,因此没有SWT的任何优势: - (