आपके द्वारा उल्लेखित पैनल लेआउट पैनल हैं, इसलिए लेआउट सिस्टम का एक संक्षिप्त अवलोकन बताता है कि यह संभवतः सबसे कुशल पैनल की एक सरल सूची नहीं होने जा रही है, लेकिन आप उन पैनलों का उपयोग कैसे करते हैं जो दक्षता और प्रदर्शन पर सबसे अधिक प्रभाव डालते हैं।
LayoutSystem_Overview :
अपने सरलतम रूप में, लेआउट एक पुनरावर्ती प्रणाली है जो एक तत्व को आकार, तैनात, और खींचा जाता है। अधिक विशेष रूप से, लेआउट एक पैनल तत्व के बच्चों के संग्रह को मापने और व्यवस्थित करने की प्रक्रिया का वर्णन करता है। लेआउट एक गहन प्रक्रिया है। बच्चों का संग्रह जितना बड़ा होगा, गणना की संख्या उतनी अधिक होगी। संग्रह के स्वामित्व वाले पैनल तत्व द्वारा परिभाषित लेआउट व्यवहार के आधार पर जटिलता भी पेश की जा सकती है। एक अपेक्षाकृत सरल पैनल, जैसे कि कैनवस, एक अधिक जटिल पैनल की तुलना में काफी बेहतर प्रदर्शन कर सकता है, जैसे ग्रिड।
हर बार जब एक बच्चा UIElement अपनी स्थिति बदलता है, तो उसमें लेआउट सिस्टम द्वारा एक नया पास ट्रिगर करने की क्षमता होती है। इसलिए, उन घटनाओं को समझना महत्वपूर्ण है जो लेआउट सिस्टम को लागू कर सकते हैं, क्योंकि अनावश्यक आह्वान से खराब आवेदन प्रदर्शन हो सकता है। निम्नलिखित उस प्रक्रिया का वर्णन करता है जो तब होती है जब लेआउट सिस्टम लागू होता है।
1. एक बच्चा UIElement पहले इसकी कोर गुणों को मापा द्वारा लेआउट प्रक्रिया शुरू करता है।
2. फ्रेमवर्क पर परिभाषित आकार गुणों का मूल्यांकन किया जाता है, जैसे कि चौड़ाई, ऊंचाई, और मार्जिन।
3. पैनल-विशिष्ट तर्क को लागू किया जाता है, जैसे डॉक दिशा या स्टैकिंग ओरिएंटेशन।
4. सभी बच्चों को मापने के बाद सामग्री की व्यवस्था की गई है।
5. बच्चों का संग्रह स्क्रीन पर तैयार किया गया है।
6. यदि अतिरिक्त बच्चों को संग्रह में जोड़ा जाता है, तो प्रक्रिया फिर से शुरू की जाती है, एक लेआउट ट्रांसफॉर्मर लागू किया जाता है, या UpdateLayout पद्धति को बुलाया जाता है।
बच्चों के मापन और व्यवस्था के बारे में अधिक जानकारी के लिए LayoutSystem_Measure_Arrange देखें
लेआउटसंरचना_संरचना :
लेआउट एक पुनरावर्ती प्रक्रिया है। बच्चों के संग्रह में प्रत्येक बाल तत्व लेआउट सिस्टम के प्रत्येक आह्वान के दौरान संसाधित हो जाता है। नतीजतन, लेआउट सिस्टम को चालू करने से बचना चाहिए जब यह आवश्यक नहीं है। निम्नलिखित विचार आपको बेहतर प्रदर्शन प्राप्त करने में मदद कर सकते हैं।
इस बात से अवगत रहें कि कौन से संपत्ति मूल्य परिवर्तन लेआउट सिस्टम द्वारा एक पुनरावर्ती अद्यतन को बाध्य करेंगे।
निर्भरता गुण जिनके मान लेआउट सिस्टम को इनिशियलाइज़ कर सकते हैं सार्वजनिक झंडे के साथ चिह्नित हैं। AffMMeasure और AffectsArrange उपयोगी सुराग प्रदान करता है जिसके रूप में गुण मान परिवर्तन लेआउट सिस्टम द्वारा एक पुनरावर्ती अद्यतन के लिए बाध्य करेंगे। सामान्य तौर पर, किसी भी संपत्ति जो किसी तत्व के बाउंडिंग बॉक्स के आकार को प्रभावित कर सकती है, उसके पास एक AffectsMeasure झंडा होना चाहिए जो सही है। अधिक जानकारी के लिए, निर्भरता गुण अवलोकन देखें।
जब संभव हो, एक लेआउट ट्रांसफॉर्मर के बजाय एक रेंडरट्रांसफॉर्म का उपयोग करें।
उपयोगकर्ता इंटरफ़ेस (UI) की सामग्री को प्रभावित करने के लिए एक लेआउटट्रांसफॉर्म एक बहुत ही उपयोगी तरीका हो सकता है। हालांकि, यदि परिवर्तन के प्रभाव को अन्य तत्वों की स्थिति को प्रभावित नहीं करना है, तो इसके बजाय एक रेंडरट्रांसफॉर्म का उपयोग करना सबसे अच्छा है, क्योंकि रेंडरट्रांसफॉर्म लेआउट सिस्टम को लागू नहीं करता है। LayoutTransform अपने परिवर्तन को लागू करता है और प्रभावित तत्व की नई स्थिति के लिए एक पुनरावर्ती लेआउट अद्यतन को मजबूर करता है।
UpdateLayout को अनावश्यक कॉल से बचें।
UpdateLayout पद्धति एक पुनरावर्ती लेआउट अद्यतन को बाध्य करती है, और अक्सर आवश्यक नहीं होती है। जब तक आप सुनिश्चित नहीं हैं कि पूर्ण अपडेट की आवश्यकता है, तब तक इस पद्धति को आपके लिए कॉल करने के लिए लेआउट सिस्टम पर भरोसा करें।
बड़े बच्चों के संग्रह के साथ काम करते समय, एक नियमित स्टैकपैनल के बजाय एक वर्चुअलाइज़िंगस्टैकपैनल का उपयोग करने पर विचार करें।
चाइल्ड कलेक्शन को वर्चुअलाइज करके, वर्चुअलाइज़िंगस्टैकप्नेल केवल उन वस्तुओं को मेमोरी में रखता है जो वर्तमान में माता-पिता के व्यूपोर्ट के भीतर हैं। परिणामस्वरूप, अधिकांश परिदृश्यों में प्रदर्शन में काफी सुधार हुआ है।
ऑप्टिमाइज़िंग प्रदर्शन: लेआउट और डिज़ाइन : यह लेख विस्तार से बताता है कि पेड़ को कुशलता से कैसे बनाया जाए और उनकी जटिलता के आधार पर पैनलों की एक सरल सूची दी जाए
कैनवास (कम से कम संकलन = अधिक कुशल और बेहतर प्रदर्शन)
ग्रिड
अन्य पैनल (अधिक जटिल = कम कुशल और बदतर प्रदर्शन)
ध्यान देने के लिए अन्य प्रदर्शन विचार: WPF UI रेंडरिंग गति को बेहतर बनाने के तरीके
- सब कुछ कैश। ब्रश, रंग, ज्यामिति, स्वरूपित ग्रंथ, ग्लिफ़। (उदाहरण के लिए हमारे पास दो कक्षाएं हैं: रेंडरटूल और टेक्स्टचेचे। दोनों इकाइयों के साझा करने के लिए प्रत्येक इकाई पते की रेंडरिंग प्रक्रिया। इसलिए यदि दो चार्टों में एक ही पाठ है, तो इसकी तैयारी को केवल एक बार निष्पादित किया जाता है।)
- फ्रीज को फ्रीज करें, यदि आप लंबे समय तक इसका उपयोग करने की योजना बना रहे हैं। विशेष रूप से ज्यामितीय। कॉम्प्लेक्स अनफ्रीज्ड जियोमेट्रीज हिटटेस्ट को बेहद धीमी गति से निष्पादित करते हैं।
- प्रत्येक आदिम के प्रतिपादन के सबसे तेज़ तरीके चुनें। उदाहरण के लिए, टेक्स्ट रेंडरिंग के लगभग 6 तरीके हैं, लेकिन सबसे तेज़ है ड्रॉइंग कॉन्टेक्स्ट।ड्राग्लिफ़्स।
- कंटेनर पुनर्चक्रण सक्षम करें। वर्चुअलाइजेशन कई प्रदर्शन सुधार लाता है, लेकिन कंटेनरों को निपटाया और फिर से बनाया जाएगा, यह डिफ़ॉल्ट है। लेकिन आप VirtualizingStackPanel.VirtualizationMode = "पुनर्चक्रण" सेट करके कंटेनरों को रीसायकल करके अधिक प्रदर्शन प्राप्त कर सकते हैं
- से यहाँ : वहाँ घोंसला बनाने से है कि आपके आवेदन का समर्थन कर सकते की राशि के लिए कोई व्यावहारिक सीमा नहीं है, तथापि, यह आमतौर पर सबसे अच्छा केवल उन पैनलों कि वास्तव में अपने इच्छित लेआउट के लिए आवश्यक हैं का उपयोग करने के लिए आपके आवेदन को सीमित करने के लिए है। कई मामलों में, लेआउट कंटेनर के रूप में लचीलेपन के कारण नेस्टेड पैनलों के बजाय ग्रिड तत्व का उपयोग किया जा सकता है। यह पेड़ से अनावश्यक तत्वों को निकालकर आपके आवेदन में प्रदर्शन बढ़ा सकता है।