Я испытываю низкую производительность 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, он сильно использует мой графический процессор, и производительность всей системы падает:
Похоже, что JavaFX redr aws все содержимое окна, а не только измененная часть (такое же поведение на Windows).
Это ожидаемое поведение? Может кто-нибудь сказать мне, почему это происходит?