2012-04-20 16 views
5

में बहुत से आयतों को चित्रित करना मेरे पास सीडी में जीडीआई + का उपयोग करके बहुत से छोटे आयताकार (लगभग 1 मिलियन) ड्राइंग करने का एक आवेदन है और प्रदर्शन ... बहुत अच्छा नहीं है। मैं समझता हूं कि Graphis.FillRectangle पर उन्हें पास करने के लिए Rectangle ऑब्जेक्ट्स का निर्माण करने में कुछ समय लगता है। मैं यह भी समझता हूं कि अगर मैं Rectangle एस फ्रेम से फ्रेम में बदलता हूं, तो मैं इससे बच नहीं सकता, क्योंकि Rectangle अपरिवर्तनीय होने के लिए डिज़ाइन किया गया है। मेरा सवाल इसलिए है: क्या इस ड्राइंग कॉल के प्रदर्शन में सुधार करने की कोई संभावना है सिवाय इसके कि सभी Rectangle एस को दिखाना चाहिए?जीडीआई +

अग्रिम धन्यवाद, क्रिस्टोफ

+0

इंस्टेंटियेटिंग आयत वास्तविक API कॉल की तुलना में लगभग कोई समय नहीं लेगा। वास्तव में, आयताकार एक संरचना है। – usr

+0

क्या आपका मतलब 1 हजार या 1 मिलियन है? –

+0

लगभग निश्चित रूप से एक बेहतर तरीका है। आयतों का प्रतिनिधित्व क्या करता है? आप आकर्षित करने की क्या कोशिश कर रहे हैं? –

उत्तर

9

मैं सुझाव है कि आप के बजाय कॉल की सरणी संस्करण का उपयोग करें:

FillRectangles(Brush brush, Rectangle[] rects); 

है कि आप के लिए काम नहीं करता है क्योंकि आप अलग ब्रश या की तरह की जरूरत है आप, राज्य (ब्रश) द्वारा प्राइमेटिव को समूहित करना चाहिए और प्रत्येक को एक ही बार में सरणी खींचना चाहिए। एक त्वरित परीक्षण कम से कम तीन बार प्रदर्शन दिखाता है, यानी 300 के आयताकार अलग-अलग रूप से महसूस करते हैं जैसे कि 1 एम आयताकार एक बार में खींचे जाते हैं।

+1

के बारे में पढ़ना चाहिए जो वास्तव में बहुत तेज़ है ... – Christoph

+0

फिलरक्टैंगल इतनी धीमी है। कुछ तेज मिला है? कोई आश्चर्य नहीं कि एंड्रॉइड ने ऑपरेटिंग सिस्टम में 2 डी त्वरण को धक्का दिया, क्योंकि डेवलपर्स नौकरी भरने में तेजी लाने के लिए काम नहीं करते हैं .. खिड़कियों पर कोई त्वरण नहीं होता है, और आपको खराब प्रदर्शन करने वाले ऐप के साथ छोड़ दिया जाता है। चिंता न करें, 2050 तक मुझे लगता है कि पीसी हार्डवेयर FillRectangles फ़ंक्शन के लिए पर्याप्त तेज़ होना चाहिए। मैं धैर्यपूर्वक इंतजार करूँगा। – hamish

+0

डॉटट्रेस का उपयोग करके मैं 2017 हार्डवेयर का उपयोग करके भी सभी खराब प्रदर्शन कार्यों को देख सकता हूं, यह अभी भी बुरी तरह से प्रदर्शन करता है .. इसमें शामिल हैं: फिलरक्टैंगल, ड्राइमेज यूंस्केल्ड (जीडीआईपीड्राइमेज I), ड्राइमेज (GdipDrawImageRect) – hamish

संबंधित मुद्दे