当舞台的大小增加时,即使只有一小部分区域发生变化,我也会遇到 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 上的行为相同)。
这是预期的行为吗?有人能告诉我为什么会这样吗?

