我正在研究这个问题,Piccolo2D
图形在SWT
桥内部运行时效果要慢得多。
最后我发现,代码运行得慢得多,就是对Graphics2D.fill()
方法的调用。在SWT桥的情况下,它的工作速度慢了10倍,在普通的Swing中。
可能的原因是剪裁区域。
其他可能的原因是什么?
怎么可能看到原因是裁剪? Graphics2D.getClipBounds()
的结果在两种情况下都是相同的,但它被记录为“用户”剪切区域。是否可以看到“设备”剪辑区域?
答案 0 :(得分:0)
SWT变得比Swing慢,因为它使用代理到OS小部件。问题是OS部分(非托管代码)经常与Java代码(托管代码)通信。这种过渡' (设法为非托管而相反)很慢,因为JVM必须在系统上设置标志,以说明程序是否可以访问(内存,......)。
Swing主要使用托管代码'部分,因此可以从例如JIT优化中受益。
另一方面,SWT小部件给人一种更好的感觉,因为操作系统管理绘图,悬停状态等等,即使Java代码有点滞后。
以为,Piccolo2D使用轻量级小部件,因此没有SWT的任何优势: - (