2015-08-09 3 views
0

Я работаю над приложением JavaFX и должен нарисовать много (4000) дуги. Я использую JavaFX Canvas метод strokeArc графического контекста.Производительность рендеринга холста JavaFX

Приложение выполняет очень слабые, но не вызовы методов strokeArc, я думаю, что это происходит позже, возможно, при рендеринге. Результаты состоят в том, что приложение занимает около 5 секунд, чтобы показать дугу на gui.

Есть ли более быстрый способ рисовать дугу в JavaFX?

ответ

1

Нет, нет. Холст самый быстрый.

Вы не предоставили MCVE. Я просто попробовал простое приложение. Работает довольно быстро, 4000 дуг, нарисованных в 6 мс. Окно приложения появится немедленно. Вот код:

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.canvas.GraphicsContext; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.ArcType; 
import javafx.stage.Stage; 

public class ArcTest extends Application { 

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

    @Override 
    public void start(Stage primaryStage) { 

     Group root = new Group(); 
     Canvas canvas = new Canvas(300, 250); 

     GraphicsContext gc = canvas.getGraphicsContext2D(); 

     root.getChildren().add(canvas); 
     primaryStage.setScene(new Scene(root)); 
     primaryStage.show(); 

     drawShapes(gc); 

    } 

    private void drawShapes(GraphicsContext gc) { 

     long time = System.currentTimeMillis(); 

     gc.setFill(Color.GREEN); 
     gc.setStroke(Color.BLUE); 
     gc.setLineWidth(5); 
     for(int i=0; i < 4000; i++) { 
      gc.strokeArc(10, 160, 30, 30, 45, 240, ArcType.OPEN); 
     } 

     System.out.println(System.currentTimeMillis() - time); 
    } 
} 

Если вы не предоставите код с дополнительной информацией (BlendMode и т.д.), это трудно, чтобы помочь вам.

+1

Возможно, встроенный графический редактор холста JavaFX Performace Optimizer понимает, что чертеж 4000 раз идентичной дуги может быть заменен одним здесь :-) – mipa

+0

Спасибо. Я пробовал ваш исходный код, и это быстро для 4000 дуг. Проблема в том, что я ошибся с количеством дуг. Я рисую не только 4000 дуг, мне приходится рисовать 70 000 дуг. И для этого ваш исходный код также медленный. Я думаю, что нет лучшего решения? – jojo2100

+0

Пожалуйста, попробуйте свою тестовую программу с 70 000 дугами. Вы увидите, что код завершен через 25 миллисекунд, но рендеринг Java имеет очень долгую задержку. – jojo2100

Смежные вопросы