Я пытаюсь преобразовать некоторый Java2D-код в JavaFX, и у меня возникла проблема с производительностью JavaFX Canvas. В какой-то момент мне нужно будет нарисовать тысячи маленьких кругов на экране.Задержка Canvas JavaFX
Моя проблема заключается в том, что в первом чертеже мой код занимает много времени для выполнения. Но если мне нужно выполнить второй рисунок, требуется всего лишь небольшая часть времени (он по крайней мере в 10 раз быстрее).
Есть ли что-нибудь, что я делаю неправильно? Есть ли способ предотвратить эту первоначальную задержку?
Я написал этот код, чтобы проверить его. В этом коде я рисую 500 000 кругов в случайных позициях на холсте 1000 x 1000 (построен ранее). Я связал этот код с событием нажатия кнопки, и в первый раз, когда я нажимаю его, требуется 10 секунд. Но если я просто нажму снова, это займет всего 0,025 секунды.
private void paintCanvas() {
long initTime = System.currentTimeMillis();
GraphicsContext cg = canvas.getGraphicsContext2D();
cg.setFill(Color.WHITE);
cg.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
cg.setFill(Color.rgb(0, 0, 0, 0.1));
Random rand = new Random();
for (int i = 0; i < 500000; i++) {
cg.fillOval(1000 * rand.nextFloat(), 1000 * rand.nextFloat(), 2, 2);
}
long endTime = System.currentTimeMillis();
System.out.println("Time spent on drawing:" + (endTime - initTime)/1000.0f);
}
На самом деле нет максимального количества новых элементов. Он может варьироваться от нескольких сотен до сотен тысяч, в зависимости от потребностей пользователей. И да, это нормально, если некоторые элементы появляются со временем.
Я знаю 500000 ценность там, чтобы продемонстрировать проблему, но сколько в вашем целевом приложении, каково максимальное количество * новых * элементов, которые вам нужны для рисования каждого кадра? Таким образом, ответ может быть лучше адаптирован к вашим конкретным ограничениям. Кроме того, это нормально для приложения, если некоторые элементы «появляются» со временем? – jewelsea
Hi jewelsea. На самом деле нет максимального количества новых элементов. Он может варьироваться от нескольких сотен до сотен тысяч, в зависимости от потребностей пользователей. И да, это нормально, если некоторые элементы появляются со временем. –
Относите [комментарий к списку рассылки разработчиком холста] (http://mail.openjdk.java.net/pipermail/openjfx-dev/2014-May/013838.html). – jewelsea