【问题标题】:JavaFX 2 drawing performanceJavaFX 2 绘图性能
【发布时间】:2012-05-17 09:50:57
【问题描述】:

感觉JavaFX 2的绘图性能比Swing差。我认为原因之一是您如何绘制事物,例如绘制线条时,必须为每条线创建一个Line 对象并将其添加到某个容器中,而在 Swing 中,只需获取一次 Graphics2D,然后进行 drawLine,而无需每次都创建新对象。那么,有没有更高效的方式来使用 JavaFX 2 进行绘制,例如如果您必须绘制大约 3000 条弧线?什么是最好的“绘图表面”?目前我正在使用Group。感谢您的任何提示!

【问题讨论】:

    标签: performance drawing javafx-2


    【解决方案1】:

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

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

    请参阅JavaFX mailing list archive,讨论即将推出的 JavaFX 2.2 直接绘制接口(称为 Canvas 节点)及其影响。

    虽然将对象粘贴到容器中似乎性能较差,但容器实现可以根据需要使用现代 GPU 中内置的加速保留模式渲染硬件。另请注意,JavaFX 架构在内部跟踪脏区并缓存昂贵的渲染操作的结果以提高性能。因此,使用容器本身并不意味着比可能依赖于立即模式实现的直接绘制接口更慢的性能。

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

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

    相关

    Osvaldo 的 JavaFX performance analysis 虽然很旧,但也包含对您问题中提出的一些问题的深入讨论。

    openjfx wiki 中有一个关于Performance Tips and Tricks 的精彩部分。

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

    【讨论】:

      【解决方案2】:

      在 JavaFX 2.2 中,计划添加一个类似于 HTML5 Canvas 的对象,这将非常适合您绘制大量图元的需要。

      详见下一期的文档:http://javafx-jira.kenai.com/browse/RT-17407

      【讨论】:

      • 感谢您的链接,我很好奇它发布时的性能有多好 :-)
      【解决方案3】:

      查看Pixel Graphics 实验帖子以获取提示。有两种方法,第一种使用Group,另一种使用ImageView。虽然我自己没有尝试过,但作者说ImageView 方法更快并且具有更好的可视化。另一方面,它使用了已弃用的 API 方法。

      【讨论】:

        猜你喜欢
        • 2016-04-18
        • 1970-01-01
        • 2022-06-14
        • 2012-05-08
        • 2019-09-10
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        • 2012-07-07
        相关资源
        最近更新 更多