मेरे पास कई डेटाग्रिड्स (सिल्वरलाइट टूलकिट से) के साथ एक एसएल एप्लीकेशन है, प्रत्येक अपने स्वयं के दृश्य पर। यदि कई डेटाग्रिड्स खोले जाते हैं, तो दृश्यों के बीच बदलना (उदाहरण के लिए टैबइटेम्स) में काफी समय लगता है (कुछ सेकंड) और यह पूरे एप्लिकेशन (यूआई थ्रेड) को फ्रीज करता है।कई लोड किए गए नियंत्रणों के साथ सिल्वरलाइट प्रदर्शन
अधिक डेटाग्रिड्स लोड किए जाते हैं, जितना अधिक समय लगता है। यूआई चैनेज को धीमा करने वाले ये डेटाग्रिड्स ऐप में अन्य स्थानों पर हो सकते हैं और उस पल में भी दिखाई नहीं दे सकते हैं। लेकिन एक बार जब वे खोले जाते हैं (और डेटा के साथ लोड होते हैं), तो वे अन्य डेटाग्रिड्स को धीमा कर देते हैं। ध्यान दें कि डेटाग्रिड्स का निपटारा नहीं किया गया है और फिर फिर से बनाया गया है, वे अभी भी स्मृति में रहते हैं, केवल उनके माता-पिता नियंत्रण को छुपाया जा रहा है और फिर से दिखाई दे रहा है।
मैंने एप्लिकेशन का प्रोफाइल किया है। यह दिखाता है कि agcore.dll का SetValue फ़ंक्शन बाधा है। दुर्भाग्य से, ड्राइंग के लिए जिम्मेदार इस सिल्वरलाइट मूल पुस्तकालय के लिए डीबग प्रतीकों उपलब्ध नहीं हैं।
समस्या डेटाग्रिड नियंत्रण में नहीं है - मैंने इसे XCeed के ग्रिड के साथ बदलने की कोशिश की और विचारों को बदलने पर प्रदर्शन भी बदतर है।
क्या आपको कोई समस्या है कि इस समस्या को हल करने का तरीका क्या है? क्यों अधिक खुले नियंत्रण अन्य नियंत्रण धीमा करते हैं?
मैं एक नमूना है कि इस मुद्दे से पता चलता बनाई है: VS solution, live demo
अद्यतन: प्रदान की नमूना पर VS11 प्रोफाइलर का उपयोग करते हुए पता चलता है कि समस्या MeasureOverride में हो सकता है (प्रत्येक DataGridCell के लिए कई बार बुलाया जा रहा है, मैं लगता है)। लेकिन फिर भी, यह धीमा क्यों है क्योंकि अधिक नियंत्रण कहीं और लोड हो जाते हैं? प्रदर्शन में सुधार करने का कोई तरीका है?
अद्यतन 2: मुझे यह उल्लेख करना चाहिए कि मैं अपने विशेष एप्लिकेशन में टैबकंट्रोल का उपयोग नहीं करता हूं। मैं वर्तमान में सक्रिय ViewModel दिखाने के लिए Caliburn.Micro और ContentControl का उपयोग करता हूं। लेकिन एक ही मुद्दा TabControl के साथ है इसलिए मैंने इसे मूल समस्या का वर्णन करने के लिए उपयोग किया।
के साथ अपने datagrid की जगह चर्चा यहाँ (TabControl के बारे में बिट) देखें, यह मदद कर सकता है: http://stackoverflow.com/questions/1389769/wpf-virtualizingstackpanel-for-increased-performance – Phil
असल में, मेरे मूल एप्लिकेशन में, मैं कैलिबर्न का उपयोग करता हूं। मैक्रो (एमवीवीएम फ्रेमवर्क) तो टैबकंट्रोल की बजाय, मेरे पास ContentControl वर्तमान में सक्रिय ViewModel (और इस प्रकार इसका दृश्य) से जुड़ा हुआ है। फिर भी, मैं चर्चा की जांच करूंगा और आपको बता दूंगा। धन्यवाद! – gius
दायरप्रॉपर 404'एड –