2009-09-09 61 views
3

我的第一個問題=)。我正在用用JavaFx編寫的用戶界面編寫視頻遊戲。行爲是正確的,但我遇到性能問題。我想弄清楚如何排隊刷新應用程序的刷新。什麼使JavaFx 1.2場景圖刷新?

我有一個相對複雜的場景圖表示六角形地圖。它縮放以便在地圖中可以有100或1000個六邊形。隨着六角形的數量增加,gui的響應性下降。我已經使用YourKit(一個Java Profiler)來跟蹤這些主要重繪操作的​​延遲。

我大部分時間都在晚上試圖找出如何做兩件事情,並明白了一兩件事:

1)原因CustomNode時,它被塗成打印的東西到控制檯。這將幫助我確切地確定這些塗料何時排隊。

2)確定何時將CustomNode置於重新排隊隊列中。

如果我回答1和2,我也許能弄清楚它是什麼,是所有這些不同的節點結合在一起。 JavaFX是否可能僅通過全局刷新來工作(可疑)?

回答

3

JavaFX腳本是一種功能強大的UI語言,但某些實踐會導致性能下降。最佳性能一般歸結爲:

  • 保持場景圖中的小

  • 保管使用綁定到最低限度(你可以看看使用觸發器,而不是這是更高性能)

Jim Weaver的blog post擴展了這些觀點。

我不確定您的問題的具體答案。如果您檢查1.2.1文檔,您可能能夠在Node文檔中找到一個可以覆蓋並添加println語句的點,但我不確定它可以完成。你可以嘗試張貼在forums.sun.com

+0

嗨醪 感謝您的建議中可以看出。我讀過那篇文章,並認爲我理解它。問題是這篇文章並沒有給你任何分析方法來找出什麼特別是造成了延遲。我做了一些分析,並相信我的代碼中的大部分計算時間都花在JSGPanelRepainter.repaintAll()中。問題是,我的模型或演示文稿都沒有改變,需要完全重新繪製。這使我想知道什麼觸發了repaintAll()。我只是不知道如何追蹤。 乾杯。 – Spina 2009-09-09 20:29:10

+0

@Spina在JFX 1.2中,重繪頻繁發生,即使不必要時也是如此。 1.3應該有更好的性能,只有在絕對必要時纔有選擇地重繪。艾米福勒在這個演講中指出(http://steveonjava.com/2009/12/18/javafx-layout-secrets/)這個問題。 – 2010-02-09 13:55:25

1

這是一個部分文章。我希望在我做了更多的工作之後擴展它。我想把我迄今爲止所做的事情放進去,所以我不會忘記。

我意識到我需要讓我的IDE運行一個完整的JavaFx 1.2源代碼。這將使我能夠將核心代碼放入核心代碼中來確定發生了什麼。我決定在Eclipse上爲remote debugging做這個配置。我正在Netbeans中開發我的FX,但我更喜歡Eclipse,所以如果可以的話,這就是我想調試的。

爲了將這些信息導入到Eclipse中,我首先用我的代碼使用的Java源創建了一個項目。然後,我添加了外部罐子到項目。在我的Mac上,我鏈接到的Jars在/Library/Frameworks/JavaFX.framework/Versions/1.2

然後我去搜索源鏈接到這些罐子。不幸的是,它不可用。我可以在/Library/Frameworks/JavaFX.framework/Versions/1.2/src.zip中找到它的一部分。

我做了一些研究,發現剩下的唯一可用選項是安裝Java Decompilier。我使用這個,因爲它很容易安裝到Eclipse 3中。4:HTTP // colon_ java的反編譯_dot free.fr/(< - 請原諒psudo鏈接,我很有限的,因爲我是新)

這就是現在的我。我可以導入Core FX課程,並相信我可以設置中斷點並開始真正的分析。隨着我的進展,我會更新這篇文章。

我發現了一個有用的基準測試工具:

如果使用JVM運行ARG:

-Djava.util.logging.config.file = /路徑/到/日誌/文件/ logging.properties

而且你已經把下列ARGS成由arg引用的文件:

處理器= java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = ALL java.util中。 logging.ConsoleH andler.formatter = java.util.logging.SimpleFormatter com.sun.scenario.animation.fps.level = ALL

你會得到控制檯輸出包括每秒的幀數。對於FX 1.2而言,它並不適合我,但它似乎適用於1.2.1(2009年9月9日發佈)。我還沒有運行1.2.1的Netbeans。

1

您可能想閱讀這篇文章。

http://fxexperience.com/2009/09/performance-improving-insertion-times/

基本上,到場景圖插入很慢,好處是可以按配料多達刀片

+0

謝謝史蒂文! 我以前沒遇到過fxexperience.com。這是一個很好的資源,這篇文章絕對有啓發性。 我一直在做一些猜測和檢查優化,並把 緩存:真 在我的一些組件,我已經從7 FPS的地圖與100六邊形到13 FPS。它仍然太慢,但它變得越來越好。由於所有100個不在同一時間在屏幕上,我正在考慮某種動態添加/刪除,因此只有可見的那些在場景圖中。 – Spina 2009-09-18 14:15:52

+0

新的場景圖(Prism)應該會在今年晚些時候(11月/ 12月?)到達,這顯然有望顯着提高性能。 – 2009-09-25 05:18:55