Ich versuche, Java2D-Code in JavaFX zu konvertieren, und ich habe ein Problem bezüglich der Leistung von JavaFX Canvas. Irgendwann werde ich Tausende kleiner Kreise auf dem Bildschirm zeichnen müssen.JavaFX Canvas Verzögerung
Mein Problem ist, dass in der ersten Zeichnung mein Code viel Zeit braucht, um ausgeführt zu werden. Aber wenn ich eine zweite Zeichnung machen muss, dauert es nur einen Bruchteil der Zeit zu zeichnen (es ist mindestens 10 mal schneller).
Gibt es irgendetwas, was ich falsch mache? Gibt es eine Möglichkeit, diese anfängliche Verzögerung zu verhindern?
Ich schrieb diesen Code, um es zu testen. In diesem Code zeichne ich 500.000 Kreise an zufälligen Positionen auf einer 1000 x 1000 Leinwand (zuvor gebaut). Ich habe diesen Code mit einem Button-Klick-Ereignis verknüpft, und beim ersten Klicken dauert es 10 Sekunden, bis ich den Befehl ausgeführt habe. Aber wenn ich noch einmal klicke, dauert es nur 0,025 Sekunden.
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);
}
Tatsächlich gibt es keine maximale Anzahl neuer Elemente. Abhängig von den Bedürfnissen der Benutzer kann es zwischen einigen Hundert und Hunderttausenden liegen. Und ja, es ist in Ordnung, wenn einige Elemente im Laufe der Zeit auftauchen.
ich die 500.000 kennen Wert ist da, um das Problem zu demonstrieren, aber wie viele in Ihrer Zielanwendung gibt es die maximale Anzahl von * neuen * Elementen, die Sie für jeden Frame benötigen? So kann eine Antwort besser auf Ihre spezifischen Anforderungen zugeschnitten werden. Ist es auch für die App in Ordnung, wenn einige Elemente im Laufe der Zeit "auftauchen"? – jewelsea
Hallo Juwel. Tatsächlich gibt es keine maximale Anzahl neuer Elemente. Abhängig von den Bedürfnissen der Benutzer kann es zwischen einigen Hundert und Hunderttausenden liegen. Und ja, es ist in Ordnung, wenn einige Elemente im Laufe der Zeit auftauchen. –
Relate [Mailinglistenkommentar vom Canvas-Entwickler] (http://mail.openjdk.java.net/pipermail/openjfx-dev/2014-May/013838.html). – jewelsea