JavaFX 2绘图性能

ste*_*wpf 7 performance drawing javafx-2

我觉得JavaFX 2的绘图性能比Swing差.我认为其中一个原因是你如何绘制东西,例如绘制一条线时,必须为每条线创建一个Line对象并将其添加到某个容器中,而在Swing中,只需获取Graphics2D一次,然后执行drawLine而不创建每次都有新的物体.那么,是否有更高效的方式使用JavaFX 2进行绘制,例如,如果你必须绘制大约3000个弧?什么是最好的"绘图表面"?目前我正在使用一个小组.谢谢你的提示!

jew*_*sea 14

您当前使用组的方法可能很好,您可能会发现在您的组中绘制3000弧的性能对于您的应用程序用户来说是完全可以接受的.

使用Group的当前替代方法是使用布局窗格,这将添加一些方便的功能,但添加额外的开销层,当您有数千个容易手动布局的对象时,这是不必要的.

有关JavaFX 2.2即将推出的直接绘制界面(称为Canvas Node)及其含义的讨论,请参阅JavaFX邮件列表存档.

虽然在容器中粘贴对象可能看起来效率较低,但如果愿意,容器实现可以使用现代gpus中内置的加速保留模式渲染硬件.另请注意,JavaFX体系结构在内部跟踪脏区域并缓存昂贵的渲染操作的结果以提高性能.因此,容器的使用本身并不意味着比可能依赖于立即模式实现的直接绘制界面更慢的性能.

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

最终,很可能会写很多博客文章来比较Canvas与许多scenegraph对象的性能,也许还有其他框架,如html canvas,java2d,swing等.所以及时,回答这样的问题会更容易.

有关

Osvaldo的JavaFX性能分析虽然陈旧,但也包括对您问题中提出的一些问题的深入讨论.

有一个不错的部分性能提示和技巧的OpenJFX维基.

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