2011-01-31 11 views
5

मैं लंबे कैनवास (सोच स्ट्रिपचार्ट) पर बहुत सी रेखाएं खींच रहा हूं और इसे निम्न स्तर के ज्यामिति वर्गों का उपयोग करके और उन्हें ठंडा करने, प्रदर्शन के लिए काफी अच्छी तरह से ट्यून किया है। यह नाटकीय रूप से प्रदर्शन में सुधार हुआ है, लेकिन कैनवास में कुछ हज़ार आइटम लोड करने में अभी भी कुछ सेकंड लगते हैं। मैंने एप्लिकेशन पर एक प्रदर्शन विश्लेषण चलाया, और ऐसा लगता है कि प्रत्येक कॉल द्वारा canvas.children.add() पर समय का एक बड़ा प्रतिशत लिया जाता है। मैंने पढ़ा है कि यह एक हल्का कॉल होना चाहिए, और चूंकि मैं इसे एक विधि में कई बार बुला रहा हूं, इसलिए इसे किसी भी चीज को भारी करने की कोशिश नहीं करनी चाहिए ... क्या संभवतः कोई अन्य कारण हो सकता है बहुत अधिक समय? और किसी भी तरह से मैं इसे तेज कर सकता हूँ?डब्ल्यूपीएफ कैनवास प्रदर्शन- kids.add कई बार

प्रदर्शन भयानक नहीं है, लेकिन मुझे डर है कि बाद में मुझे समस्या का अधिक सेट हो सकता है जब मुझे डेटा के बड़े सेट से निपटने की आवश्यकता होती है।

बस संदर्भ के लिए, ऐसा लगता है कि इसे इस नमूने में 1400 बार कहा जाता है, और यह आधुनिक/तेज़ लैपटॉप पर लगभग 3 सेकंड CPU समय लेता है।

कैनवास अन्य नियंत्रणों के एक पदानुक्रम में निहित है, इसलिए मैं उत्सुक हूं कि यदि वे इसमें योगदान दे रहे हैं।

अतिरिक्त नोट: मैं कैनवास पर एक विशिष्ट ऊंचाई भी सेट नहीं कर रहा हूं, क्योंकि यह ग्रिड पैरेंट कंटेनर को भरने के लिए सेट है। क्या यह समस्या का स्रोत हो सकता है?

+2

जहां तक ​​प्रदर्शन का सवाल है, आप http को आजमा सकते हैं : //msdn.microsoft.com/en-us/library/system.windows.media.streamgeometry.aspx स्ट्रीम ज्यामिति जो ड्रॉइंग संदर्भ से सबसे हल्का वजन निर्माण है। –

+0

हाँ, पहले से ही स्ट्रीम ज्यामिति का उपयोग कर रहा है, और अच्छे परिणामों के साथ। धन्यवाद –

उत्तर

0

मैं सुझाव दूंगा कि आप अपने आकार सीधे बच्चों के रूप में जोड़ने की बजाय छवि में खींचें। बच्चों को प्रस्तुत करना एक बड़ा ओवरहेड है (जैसा कि आप देख सकते हैं)।

How to draw line of ten thousands of points with WPF within 0.5 second?

+0

इस से बचने की उम्मीद कर रहा था, क्योंकि मेरे पास अन्य चीजें चल रही हैं जो हमेशा इसे फिर से तैयार करने के लिए जटिल बना सकती हैं। जैसे, शीर्ष पर जोड़े गए टेक्स्ट बॉक्स और छवियां जो ड्रैग करने योग्य हैं, और अनुभाग बहुत लंबे समय तक स्क्रोल करने योग्य कंटेनर में मौजूद है। विचार करने के लिए बहुत सारे चर ... –

+3

इस पर निर्भर करता है कि आपके लिए महत्वपूर्ण प्रदर्शन कितना महत्वपूर्ण है, आप शायद सी # में कई गेमिंग ढांचे में से एक में समाधान पर विचार करना चाहें (यानी कुछ ऐसा जो स्प्राइट्स में हेरफेर करता है)। बेशक - यदि आप अन्य यूआई फ्रेमवर्क तंत्र का भी उपयोग करना चाहते हैं जो वास्तव में आपकी मदद नहीं करेगा ... बीटीडब्लू: कुछ शर्तों के तहत डब्ल्यूपीएफ हार्डवेयर प्रतिपादन का उपयोग नहीं करेगा, जो प्रदर्शन को नाटकीय रूप से कम कर सकता है - आप इसे इस विधि के साथ देख सकते हैं। डीबग। राइटलाइन ("डब्ल्यूपीएफ रेंडर कैपेबिलिटीज: रेंडरिंग टियर =" + (रेंडर कैपेबिलिटी टियर >> 16) + "(वांछित 2, 0 मतलब हार्डवेयर त्वरण नहीं है)"; – NightDweller

1

बस नियंत्रण कैनवास के भीतर है के पदानुक्रम के बारे में जोड़ने के लिए, और कैनवास की ऊंचाई:

कुछ उपयोगी लेख के लिए एक संदर्भ के साथ एक समान सवाल ही नहीं है कैनवास हमेशा जितना अधिक स्थान लेता है उतना ही लेता है, और इससे कोई फर्क नहीं पड़ता कि आप इसमें क्या जोड़ते हैं - यह कभी भी नए माता-पिता को ट्रिगर नहीं करता है/अपने माता-पिता पर गुजरता है। जहां भी आप कैनवास के अंदर जो कुछ भी करते हैं, उस दृश्य पेड़ को कभी प्रभावित नहीं कर सकता है। इसे समेटने के लिए - समस्या वहां से नहीं आ सकती है, और StreamGeomatry के बारे में सुझाव बिल्कुल सही है- यही कारण है कि आपको प्रदर्शन के मुद्दों का कारण बनता है, और streamgeormatry पर स्विचिंग इसे हल करेंगे।

+0

मैं पहले से ही लागू सभी लागू बच्चों के लिए स्ट्रीमजोमेट्री का उपयोग कर रहा हूं। उन्होंने प्रदर्शन में बहुत मदद की, लेकिन अभी भी काफी सुधार करना चाहते हैं। –

+1

ने मुझसे झूठा बना दिया- मैं वास्तव में कुछ बिंदु पर pathgeometry का उपयोग कर घायल हो गया था। बस स्ट्रीमेज में परिवर्तित हो गया है और निश्चित रूप से तेज़ है। –

+0

-1 क्योंकि मेरे पास एक ही समस्या है, लेकिन, मैं आकार के बच्चों के साथ काम कर रहा हूं, और मेरे पास धीमी व्यवहार – simo

4

मुख्य समस्या यह है कि बच्चे। जोड़ें हमेशा धीमा ऑपरेशन होता है, भले ही आप StreamGeometry ऑब्जेक्ट्स का उपयोग करते हैं। मुझे हाल ही में एक ही समस्या का सामना करना पड़ा और निम्नलिखित निष्कर्ष निकाला: यदि आप वस्तुओं को एक नए कैनवास में घुमाते हैं और इसे मुख्य कैनवास में घोंसला देते हैं, तो अतिरिक्त ऑपरेशन का प्रदर्शन नाटकीय रूप से बढ़ जाएगा। तो, 1400 तत्व जोड़ने के बजाय, 7 कैनवास में 200 तत्व डालें और उन 7 कैनवास मुख्य कैनवास में जोड़ें। चूंकि सभी ऑब्जेक्ट्स अब अलग-अलग कैनवास से संबंधित हैं, इसलिए आपको अपने ऐप को थोड़ा समायोजित करने की आवश्यकता होगी, लेकिन यह वैकल्पिक समाधान जैसे ड्रॉइंगविज़ुअल

+0

जैम है, आप इस से अनुमानित लाभ का कितना बड़ा अनुमान लगाएंगे? यानी 10% या 100% गति लाभ? धन्यवाद। –

+0

मेरे विशिष्ट मामले में (5000+ बच्चों के संग्रह पर एक बार में 300 वस्तुओं को जोड़ा गया), मुझे 2.5 सेकंड की देरी हुई और 0.3 सेकंड बन गई। –

+0

वाह वास्तव में अच्छा है। एक बार फिर धन्यवाद। –

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