Próbuję przekonwertować kod Java2D do JavaFX i utknąłem z problemem dotyczącym wydajności JavaFX Canvas. W pewnym momencie będę musiał narysować tysiące małych kółek na ekranie.JavaFX Canvas delay
Mój problem polega na tym, że na pierwszym rysunku mój kod zajmuje dużo czasu. Ale jeśli muszę wykonać drugi rysunek, losowanie zajmuje tylko ułamek czasu (jest to co najmniej 10 razy szybciej).
Czy jest coś, co robię źle? Czy istnieje sposób, aby zapobiec temu początkowemu opóźnieniu?
Napisałem ten kod, aby go przetestować. W tym kodzie losuję 500 000 okręgów w losowych pozycjach na płótnie 1000 x 1000 (zbudowanym wcześniej). Połączyłem ten kod ze zdarzeniem kliknięcia przycisku i za pierwszym razem kliknięcie zajmuje 10 sekund. Ale jeśli kliknę ponownie, zajmuje to tylko 0,025 sekundy.
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);
}
W rzeczywistości nie ma maksymalnej liczby nowych elementów. Może się wahać od setek do setek tysięcy, w zależności od potrzeb użytkowników. I tak, jest dobrze, jeśli niektóre elementy pojawiają się z czasem.
Znam 500.000 wartość jest tam, aby zademonstrować problem, ale ile w docelowej aplikacji, jaka jest maksymalna liczba * nowych * elementów potrzebnych do narysowania każdej klatki? W ten sposób odpowiedź może być lepiej dopasowana do twoich szczególnych ograniczeń. Co więcej, czy aplikacja jest w porządku, jeśli niektóre elementy "pojawiają się" w czasie? – jewelsea
Witam jewelsea. W rzeczywistości nie ma maksymalnej liczby nowych elementów. Może się wahać od setek do setek tysięcy, w zależności od potrzeb użytkowników. I tak, jest dobrze, jeśli niektóre elementy pojawiają się z czasem. –
Powiąż [komentarz listy dyskusyjnej autorstwa autora kanwy] (http://mail.openjdk.java.net/pipermail/openjfx-dev/2014-May/013838.html). – jewelsea