2012-05-08 92 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方法。