मैं कुछ जावा 2 डी कोड जावाएफएक्स में कनवर्ट करने की कोशिश कर रहा हूं और मैं जावाएफएक्स कैनवास के प्रदर्शन के संबंध में एक समस्या के साथ फंस गया हूं। किसी बिंदु पर, मुझे स्क्रीन पर हजारों छोटी मंडलियां खींचना होगा।जावाएफएक्स कैनवास देरी
मेरी समस्या यह है कि पहले चित्र में, मेरे कोड को निष्पादित करने में काफी समय लगता है। लेकिन अगर मुझे दूसरी ड्राइंग करना है, तो इसे आकर्षित करने के लिए केवल समय का एक अंश लगता है (यह कम से कम 10 गुना तेज है)।
क्या कुछ भी गलत है? क्या प्रारंभिक देरी को रोकने के लिए कोई रास्ता है?
मैंने इस कोड को परीक्षण करने के लिए लिखा था। इस कोड में मैं 1000 x 1000 कैनवास (पहले निर्मित) पर यादृच्छिक पदों पर 500,000 सर्किल खींचता हूं। मैंने इस कोड को बटन क्लिक ईवेंट से लिंक किया है, और पहली बार क्लिक करने पर इसे निष्पादित करने में 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);
}
असल में नए तत्वों की अधिकतम संख्या नहीं है। उपयोगकर्ताओं की जरूरतों के आधार पर यह कुछ सैकड़ों से सैकड़ों हजारों में भिन्न हो सकता है। और हाँ, यह ठीक है अगर कुछ तत्व समय के साथ पॉप-अप करते हैं।
मैं 500,000 पता इस मुद्दे को प्रदर्शित करने के लिए मूल्य है, लेकिन आपके लक्षित एप्लिकेशन में कितने, प्रत्येक फ्रेम को आकर्षित करने के लिए आपको * नए * तत्वों की अधिकतम संख्या क्या है? इस तरह एक उत्तर आपकी विशिष्ट बाधाओं के अनुरूप बेहतर हो सकता है। साथ ही, क्या ऐप के लिए यह ठीक है अगर कुछ तत्व समय के साथ "पॉप इन" करते हैं? – jewelsea
हाय गहने। असल में नए तत्वों की अधिकतम संख्या नहीं है। उपयोगकर्ताओं की जरूरतों के आधार पर यह कुछ सैकड़ों से सैकड़ों हजारों में भिन्न हो सकता है। और हाँ, यह ठीक है अगर कुछ तत्व समय के साथ पॉप-अप करते हैं। –
संबंधित [कैनवास डेवलपर द्वारा मेलिंग सूची टिप्पणी] से संबंधित करें (http://mail.openjdk.java.net/pipermail/openjfx-dev/2014-May/013838.html)। – jewelsea