JavaFX 多个选项卡同时更新文本区域的性能问题



我对JavaFX比较陌生,并且编写了一个小程序,它启动了许多(通常在3到10个)子进程之间。每个进程都有一个显示当前状态的专用选项卡和一个附加进程输出的大型文本区域。为简单起见,所有选项卡都是在启动时生成的。

javafx.application.Platform.runLater(() -> logTextArea.appendText(line)))

当子进程上的工作负载为中低(日志不多)时,小程序工作正常,但当子进程被大量使用并生成相当数量的日志记录输出(总共每秒几百行)时,小程序开始冻结。

我考虑过将 TextArea 绑定到输出,但我的理解是它有效地调用了Platform.runLater()方法,因此每秒仍然会有数百个对 JavaFX 应用程序线程的调用。

批处理日志记录输出也不是理想的解决方案,因为我想尽可能实时地保持显示的日志。

我认为可能解决问题的唯一解决方案似乎是动态加载各个选项卡。这肯定会防止不必要的调用来更新当前不可见的日志记录文本区域,但在我继续进行更改之前,我想在这里从您那里获得一些有用的建议。谢谢!

感谢您的所有建议。终于在今天开始实施修复程序了。

此问题已通过使用缓冲区和延时辅助检查(最多 20 行或 100 毫秒)得到解决。

此外,我还实现了滚动输出,将总流程输出限制在 1,000 行。

再次感谢您的宝贵贡献!

最新更新