首页 > 解决方案 > JavaFX:与窗口大小相关的性能

问题描述

当舞台的大小增加时,即使只有一小部分区域发生变化,我也会遇到 JavaFX 的性能不佳。

下面的例子只更新了一个 25x25 的小方块,改变了它的背景。

public class WindowSizeTest extends Application {

    private int speed = 1500000000;

    @Override
    public void start(Stage primaryStage) {
        StackPane content = new StackPane();
        content.setPrefSize(25, 25);
        content.setMaxSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);

        new AnimationTimer() {
            @Override
            public void handle(long now) {
                double val = ((double) now % speed) / speed;
                BackgroundFill backgroundFill = new BackgroundFill(Color.color(val, val, val), CornerRadii.EMPTY, Insets.EMPTY);
                Background background = new Background(backgroundFill);
                content.setBackground(background);
            }
        }.start();

        StackPane root = new StackPane(content);
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

当窗口很小时,一切都很顺利:

在此处输入图像描述

..但..

如果在我的 4k 外接显示器上最大化,它会大量使用我的 GPU,并且整个系统的性能会下降:

在此处输入图像描述

似乎 JavaFX 重绘了整个窗口内容,而不仅仅是修改的部分(在 Windows 上的行为相同)。

这是预期的行为吗?有人能告诉我为什么会这样吗?

标签: javaperformancejavafxrenderingopenjfx

解决方案


推荐阅读