2012-05-08 55 views
7

我觉得JavaFX 2的绘图性能比Swing的绘图性能差。我认为其中一个原因就是你如何画画,例如当绘制一条线时,必须为每条线创建一个Line对象,并将其添加到某个容器中,而在Swing中,只需获取一次Graphics2D,然后在不创建新对象的情况下每次绘制一条线。那么,是否还有更多使用JavaFX 2绘制的高性能方法,例如如果你不得不画大约3000个弧线?什么是最好的“绘图表面”?目前我正在使用Group。感谢您的任何提示!JavaFX 2绘图性能

回答

14

你使用一组目前的做法,可能是罚款,你可能会发现你的组内拉弧3000的性能是您的应用程序的用户完全可以接受的。

目前可以代替使用组是使用布局窗格这将增加一些方便的功能,但增加开销额外的一层,当你有几千轻松手动布局对象的哪些是不必要的。

为即将到来的直接绘制界面(叫做帆布节点)为JavaFX 2.2的讨论,请参见JavaFX mailing list archive和它的影响。

虽然它似乎不太高性能贴在容器中的对象,容器实现可以,如果愿意,利用内置到现代GPU加速保留模式渲染硬件。另请注意,JavaFX体系结构在内部跟踪脏区域并缓存昂贵渲染操作的结果以提高性能。因此,容器的使用本身并不意味着比可能依赖即时模式实现的直接绘制界面更慢的性能。

选择一个绘图表面将取决于应用。大多数JavaFX应用程序的最佳表面将是场景图节点的集合,而不是画布节点。在scenegraph中使用许多节点而不是单个Canvas节点将(通常)更容易开发,并且性能将完全可以接受。

最终,很可能会编写大量的博客文章来比较Canvas与许多场景图对象的性能,并可能与其他框架(例如html canvas,java2d,swing等)进行比较。因此,在时间方面,将更容易回答这样一个问题。

相关

奥斯瓦尔多的JavaFX performance analysis,虽然老了,还包括一些在你的问题中提出的事宜进行深入探讨。

有一个在openjfx wikiPerformance Tips and Tricks一个很好的部分。

有一些相关的StackOverflow JavaFX的性能问题:

+0

非常感谢您的详细信息! –

2

在JavaFX 2.2类似HTML5 Canvas对象计划将增加,这将非常适合你需要的画了很多primitevs。

查看连接到下一个问题的细节文档:http://javafx-jira.kenai.com/browse/RT-17407

+0

感谢您的链接,我很好奇它的表现如何,当它发布时:-) –

1

认准提示Pixel Graphics实验后。有两种方法,第一种使用Group,另一种使用ImageView。虽然没有自己尝试,但作者说ImageView方法更快,可视化效果更好。另一方面,它使用不推荐的API方法。