4

我的第一个问题=)。我正在编写一个带有用 JavaFx 编写的用户界面的视频游戏。行为是正确的,但我遇到了性能问题。我试图弄清楚如何弄清楚是什么排队了正在减慢应用程序的刷新。

我有一个相对复杂的场景图,它代表一个六边形地图。它可以缩放,以便您可以在地图中拥有 100 或 1000 个六边形。随着六边形数量的增加,gui 的响应性会降低。我使用YourKit(一个Java Profiler)来追踪这些延迟到主要的重绘操作。

我花了大部分时间试图弄清楚如何做两件事并理解一件事:

1) 使 CustomNode 在绘制时将某些内容打印到控制台。这将帮助我准确确定这些涂料何时排队。

2) 确定何时将 CustomNode 置于重绘队列中。

如果我回答 1 和 2,我也许能够弄清楚是什么将所有这些不同的节点绑定在一起。JavaFX 是否可能仅通过全局刷新工作(值得怀疑)?

4

3 回答 3

3

JavaFX 脚本是一种强大的 UI 语言,但某些做法会降低性能。最佳性能通常归结为:

  • 保持场景图很小

  • 将绑定的使用保持在最低限度(您可以查看使用性能更高的触发器)

Jim Weaver 的这篇博客文章扩展了这些观点。

我不确定你的问题的具体答案。如果您检查 1.2.1 文档,您可能能够在 Node 文档中找到一个点,您可以覆盖并添加 println 语句,但我不确定它是否可以完成。您可以尝试在forums.sun.com上发帖

于 2009-09-09T09:03:28.883 回答
1

您可能想阅读这篇文章。

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

基本上,插入到场景图中很慢,通过批量插入可以看到好处

于 2009-09-18T01:27:31.457 回答
1

这是部分帖子。我希望在完成更多工作后扩展它。我想把我迄今为止所做的事情写下来,这样我就不会忘记。

我意识到我需要使用 JavaFx 1.2 源代码来运行我的 IDE。这将允许我在核心代码中放置断点以弄清楚发生了什么。我决定在 Eclipse 上进行此配置以进行远程调试。我正在 Netbeans 中开发我的 FX,但对 Eclipse 更满意,所以如果可以的话,这就是我想要调试的。

为了将这些信息输入 Eclipse,我首先使用我的代码使用的 Java 源代码创建了一个项目。然后我将外部罐子添加到项目中。在我的 Mac 上,我链接到的罐子位于 /Library/Frameworks/JavaFX.framework/Versions/1.2

然后我去搜索源链接到这些罐子。不幸的是,它不可用。我可以在 /Library/Frameworks/JavaFX.framework/Versions/1.2/src.zip 中找到其中的一些。

我做了一些研究,发现唯一可用的选项是安装 Java 反编译器。我之所以使用这个是因为它很容易安装到 Eclipse 3.4 中:http Colon_ //java dot decompiler _dot free.fr/(<-- 请原谅伪链接,我是新人,所以受到限制)

这就是我现在的位置。我可以导航到 Core FX 课程,并相信我将能够设置断点并开始真正的分析。随着我的进步,我会更新这篇文章。

我找到了一个有用的基准测试工具:

如果您使用 JVM arg 运行:

-Djava.util.logging.config.file=/path/to/logging/file/logging.properties

并且您已将以下 args 放入该 arg 引用的文件中:

handlers = java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = ALL java.util.logging.ConsoleHandler.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。

于 2009-09-15T00:45:21.983 回答