समय और प्रदर्शन प्रदान करने के मामले में पैनल किस क्रम में सबसे कुशल हैं?


127

कई बार ऐसा होता है जब एक से अधिक पैनल मेरे इच्छित लेआउट के लिए उपयुक्त होते हैं, हालांकि मुझे पता है कि विभिन्न प्रकार के पैनल के लिए रेंडर समय में अंतर होता है।

उदाहरण के लिए, MSDN कहता है कि

एक अपेक्षाकृत सरल Panel, जैसे कि Canvas, अधिक जटिल से बेहतर प्रदर्शन हो सकता है Panel, जैसे कि Grid

तो समय और प्रदर्शन प्रदान करने के संदर्भ में, WPF पैनल किस क्रम में सबसे कुशल हैं?

WPF पैनलों:

  • Canvas
  • DockPanel
  • Grid
  • UniformGrid
  • StackPanel
  • WrapPanel
  • VirtualizingPanel / VirtualizingStackPanel

मुझे पूरा यकीन है कि मैंने इसकी एक सूची ऑनलाइन कहीं देखी थी, लेकिन मैं इसे अब नहीं ढूँढ सकता।

मैं जिस आदर्श उत्तर की तलाश कर रहा हूं, वह मुझे इस क्रम में पैनलों की एक सूची प्रदान करेगा कि वे सबसे तेजी से प्रस्तुत करेंगे। मैं समझता हूं कि बच्चों की संख्या एक बड़ा कारक है कि पैनल कितने कुशल हैं, इसलिए इस प्रश्न के लिए, मान लें कि प्रत्येक पैनल में केवल Label/ TextBoxजोड़ी है।

इसके अलावा, मैं अपवादों की एक सूची चाहूंगा, जैसे विशिष्ट पैनल जो कुछ शर्तों के आधार पर दूसरों की तुलना में बेहतर प्रदर्शन करते हैं।

अपडेट करें

नीचे दिए गए स्वीकृत उत्तर के आधार पर संक्षेप में प्रस्तुत करने के लिए , पैनल प्रदर्शन बाल वस्तुओं की संख्या और लेआउट पर आधारित है, हालांकि सामान्य तौर पर सबसे तेज़ से सबसे धीमी सूची है:

  • Canvas
  • StackPanel
  • WrapPanel
  • DockPanel
  • Grid

इसके अलावा, ए VirtualizingPanel/ का VirtualizingStackPanelउपयोग हमेशा किया जाना चाहिए यदि बहुत सारे आइटम हैं जो हमेशा स्क्रीन पर फिट नहीं होते हैं।

मैं आपको अत्यधिक सलाह दूंगा कि इस सूची से कोई आइटम लेने से पहले अधिक विवरण के लिए नीचे दिए गए स्वीकृत उत्तर को पढ़ें ।


क्या यह मानना ​​गलत है कि वर्चुअलाइज़िंग पैनल गैर-वर्चुअलाइज़िंग पैनल की तुलना में बेहतर प्रदर्शन करेंगे?
BoltClock

@BoltClock मुझे लगता है कि यह निर्भर करता है कि पैनल में गैर-दृश्य सामग्री कितनी है। यदि बहुत सारे गैर-दृश्य आइटम हैं, VirtualizingStackPanelतो निश्चित रूप से बेहतर प्रदर्शन होगा, लेकिन अगर पैनल में प्रदर्शित सभी आइटम दिखाई देते हैं तो मुझे लगता है कि नियमित पैनल का उपयोग करना बेहतर है।
राहेल

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

वर्चुअलाइजेशन के अलावा उनके पास अलग-अलग विशेषताएं हैं या वे अलग-अलग नियंत्रण नहीं होंगे। मैं ग्राहक को सर्वश्रेष्ठ यूआई प्रदान करता हूं।
पापाराज़ो

1
क्या आप सुनिश्चित हैं कि ध्यान देने योग्य अंतर (वर्चुअलाइज़ेशन से अलग) है? उन्हें बस इतना करना है कि वे अपेक्षाकृत हल्के लेआउट एल्गोरिथ्म का प्रदर्शन करें। सभी प्रतिपादन की तुलना में छोटे जो अनुसरण करेंगे। यह कहने के बाद, ग्रिड संभवतः सबसे धीमा (भारित स्केलिंग) होगा।
हेनक होल्टरमैन

जवाबों:


130

मुझे लगता है कि यह प्रत्येक पैनल की प्रदर्शन विशेषताओं का वर्णन करने के लिए अधिक संक्षिप्त और समझ में आता है, यह तुलनात्मक प्रदर्शन की तुलना करने की कोशिश करना है।

WPF सामग्री प्रदान करते समय दो पास बनाता है: माप और व्यवस्था। प्रत्येक पैनल में इन दो पासों में से प्रत्येक के लिए अलग-अलग प्रदर्शन विशेषताएं हैं।

माप पास का प्रदर्शन संरेखण (या ऑटो के मामले में Grid) का उपयोग करके समायोजित करने के लिए एक पैनल की क्षमता से सबसे अधिक प्रभावित होता है और फिर उन बच्चों की संख्या जो खिंचाव या ऑटो-आकार होते हैं। अरेंज पास का प्रदर्शन विभिन्न बच्चों के लेआउट स्थान और फिर निश्चित रूप से बच्चों की संख्या के बीच बातचीत की जटिलता से प्रभावित होता है।

कई बार दिए गए पैनल आवश्यक लेआउट के लिए आसानी से उधार नहीं देते हैं। मैंने एक नियंत्रण बनाया है जिसमें उपलब्ध स्थान के एक निश्चित प्रतिशत पर प्रत्येक को मनमाने ढंग से संख्या की आवश्यकता होती है। कोई भी डिफ़ॉल्ट नियंत्रण ऐसा नहीं करता है। उन्हें ऐसा करने का प्रयास करने (माता-पिता के वास्तविक आकार के लिए बाध्यकारी) के परिणामस्वरूप भयानक प्रदर्शन होता है। मैंने कैनवास पर आधारित एक लेआउट पैनल बनाया, जिसने न्यूनतम काम के साथ मेरा वांछित परिणाम प्राप्त किया (मैंने कैनवास के लिए स्रोत की प्रतिलिपि बनाई और इसे लगभग 20 पंक्तियों में संशोधित किया)।

उपलब्ध पैनलों:

  • कैनवास

    एक ऐसे क्षेत्र को परिभाषित करता है जिसके भीतर आप स्पष्ट रूप से कैनवस क्षेत्र के सापेक्ष निर्देशांक द्वारा बाल तत्वों को स्थिति दे सकते हैं।

    कैनवस के पास व्यवस्था पास के लिए सभी पैनलों का सबसे अच्छा प्रदर्शन है क्योंकि प्रत्येक आइटम को सांख्यिकीय रूप से एक स्थान सौंपा गया है। माप पास में भी उत्कृष्ट प्रदर्शन है क्योंकि इस पैनल में खिंचाव की कोई अवधारणा नहीं है; प्रत्येक बच्चा बस अपने मूल आकार का उपयोग करता है।

  • DockPanel

    एक ऐसे क्षेत्र को परिभाषित करता है जिसके भीतर आप एक-दूसरे के सापेक्ष क्षैतिज या लंबवत रूप से बाल तत्वों की व्यवस्था कर सकते हैं।

    Dockpanel में एक बहुत ही सरल लेआउट योजना है, जहाँ आइटमों को पिछले आइटम के सापेक्ष एक-एक करके जोड़ा जाता है। डिफ़ॉल्ट रूप से या तो ऊँचाई या चौड़ाई आइटम के मूल आकार (क्रमशः शीर्ष / तल बनाम बाएँ / दाएँ के आधार पर) द्वारा निर्धारित की जाती है और दूसरी दिशा Dockसंपत्ति द्वारा निर्धारित की जाती है यदि चौड़ाई या ऊँचाई अपरिभाषित है। मध्यम से तेज माप पास और मध्यम से तेज व्यवस्था पास।

  • ग्रिड

    एक लचीले ग्रिड क्षेत्र को परिभाषित करता है जिसमें स्तंभ और पंक्तियाँ होती हैं।

    यह सबसे प्रदर्शन गहन पैनल हो सकता है यदि आनुपातिक आकार या ऑटो आकार का उपयोग किया जाता है। बाल आइटम आकार की गणना आइटम के मूल आकार और ग्रिड द्वारा निर्दिष्ट लेआउट का एक जटिल संयोजन हो सकता है। लेआउट सभी पैनलों का सबसे जटिल भी है। माप पास के लिए मध्यम प्रदर्शन धीमा और व्यवस्था पास के लिए मध्यम प्रदर्शन धीमा।

  • StackPanel

    बाल तत्वों को एक एकल पंक्ति में व्यवस्थित करता है जो क्षैतिज या लंबवत रूप से उन्मुख हो सकता है।

    StackPanel अपने अभिविन्यास से विपरीत दिशा में देशी या सापेक्ष नौकरशाही का उपयोग करके अपने बच्चों को मापता है और अपनी अभिविन्यास की दिशा में देशी आकार (संरेखण इस दिशा में कुछ भी नहीं करता है) करता है। यह इस क्षेत्र में एक मध्य-स्तर का कलाकार बनाता है। व्यवस्था पास बस है, बस वस्तुओं को क्रम में रखना। संभवतः इस पास के लिए दूसरा सर्वश्रेष्ठ प्रदर्शन है। माप पास के लिए मध्यम प्रदर्शन और लेआउट पास के लिए तेज़ प्रदर्शन।

  • VirtualizingPanel

    पैनल तत्वों के लिए एक ढांचा प्रदान करता है जो अपने बच्चे के डेटा संग्रह को वर्चुअलाइज करता है। यह एक अमूर्त वर्ग है।

    अपने खुद के वर्चुअलाइजेशन पैनल को लागू करने के लिए एक आधार वर्ग। केवल मेमोरी और प्रोसेसर के अनावश्यक उपयोग को रोकने के लिए दृश्यमान वस्तुओं को लोड करता है। आइटम के सेट के लिए अधिक प्रदर्शन। सीमाओं की जाँच के कारण स्क्रीन पर फिट होने वाली वस्तुओं के लिए संभवतः थोड़ा कम प्रदर्शन करने वाला। एसडीके केवल इस में से एक उपवर्ग प्रदान करता है, VirtualizingStackPanel

  • WrapPanel

    स्थिति बाल तत्वों को अनुक्रमिक स्थिति में बाएं से दाएं, सामग्री को तोड़ने वाले बॉक्स के किनारे पर अगली पंक्ति में। क्रमिक क्रम में ऊपर से नीचे या दाएं से बाएं ओर क्रमिक रूप से ओरिएंटेशन प्रॉपर्टी के मूल्य के आधार पर होता है।

    माप पास एक कुछ जटिल पास है जहां एक विशेष पंक्ति के लिए सबसे बड़ी वस्तु पंक्ति की ऊंचाई निर्धारित करती है और फिर उस पंक्ति में प्रत्येक आइटम या तो अपनी मूल ऊंचाई (यदि यह एक है) या पंक्ति की ऊंचाई का उपयोग करता है। लेआउट पास सरल है, प्रत्येक आइटम को एक के बाद एक पंक्ति पर रखना और फिर अगली पंक्ति पर जारी रखना जब अगले आइटम के लिए पर्याप्त जगह नहीं है। मध्यम प्रदर्शन उपाय पास। व्यवस्था पास के लिए मध्यम से तेज़ प्रदर्शन।

संदर्भ:

जहां संभव हो वहां सबसे दक्ष पैनल का उपयोग करें

लेआउट प्रक्रिया की जटिलता सीधे आपके द्वारा उपयोग किए जाने वाले पैनल-व्युत्पन्न तत्वों के लेआउट व्यवहार पर आधारित है। उदाहरण के लिए, एक ग्रिड या StackPanel नियंत्रण कैनवास नियंत्रण की तुलना में बहुत अधिक कार्यक्षमता प्रदान करता है। कार्यक्षमता में इस अधिक वृद्धि के लिए मूल्य प्रदर्शन लागत में अधिक वृद्धि है। हालाँकि, यदि आपको उस कार्यक्षमता की आवश्यकता नहीं है जो ग्रिड नियंत्रण प्रदान करता है, तो आपको कम खर्चीले विकल्प जैसे कि कैनवास या कस्टम पैनल का उपयोग करना चाहिए।

से अनुकूलन प्रदर्शन: लेआउट और डिजाइन

लेआउट सिस्टम बच्चों के संग्रह के प्रत्येक सदस्य के लिए दो पास पूरा करता है, एक उपाय पास और एक व्यवस्था पास है। प्रत्येक चाइल्ड पैनल अपने स्वयं के विशिष्ट लेआउट व्यवहार को प्राप्त करने के लिए अपने स्वयं के मेजर ओवेरोइड और अरेंजऑवरराइड तरीके प्रदान करता है।

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

सबसे पहले, UIElement के मूल आकार गुणों का मूल्यांकन किया जाता है, जैसे क्लिप और दृश्यता। यह constraintSize नाम का एक मान उत्पन्न करता है जो कि मापनकोर को दिया जाता है।

दूसरे, फ्रेमवर्क पर परिभाषित फ्रेमवर्क गुणों को संसाधित किया जाता है, जो बाधा के मूल्य को प्रभावित करता है। ये गुण आम तौर पर अंतर्निहित UIElement की आकार विशेषताओं का वर्णन करते हैं, जैसे इसकी ऊँचाई, चौड़ाई, मार्जिन और शैली। इनमें से प्रत्येक गुण तत्व को प्रदर्शित करने के लिए आवश्यक स्थान को बदल सकता है। मीज़ोएवर्राइड को तब एक पैरामीटर के रूप में बाधा के साथ बुलाया जाता है।

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

अरेंज पास एक व्यवस्था के लिए एक कॉल के साथ शुरू होता है। व्यवस्था पास के दौरान, मूल पैनल तत्व एक आयत उत्पन्न करता है जो बच्चे की सीमा का प्रतिनिधित्व करता है। यह मान प्रसंस्करण के लिए ArrangeCore विधि को दिया जाता है।

ArrangeCore विधि बच्चे के DesiredSize का मूल्यांकन करती है और किसी भी अतिरिक्त मार्जिन का मूल्यांकन करती है जो तत्व के प्रदान किए गए आकार को प्रभावित कर सकती है। अरेंजकोर एक अरेंजसाइज तैयार करता है, जो एक पैरामीटर के रूप में पैनल के अरेंज ऑवरराइड मेथड में जाता है। ArrangeOverride बच्चे को अंतिम रूप देता है। अंत में, ArrangeCore विधि ऑफसेट गुणों का अंतिम मूल्यांकन करती है, जैसे कि मार्जिन और संरेखण, और बच्चे को अपने लेआउट स्लॉट के भीतर रखता है। बच्चे को (और अक्सर नहीं) पूरे आवंटित स्थान को भरना नहीं पड़ता है। नियंत्रण फिर मूल पैनल पर वापस आ जाता है और लेआउट प्रक्रिया पूरी हो जाती है।

से मापने और व्यवस्था बच्चे


1
अब हटाई गई टिप्पणी के जवाब में: मैंने मैट्रिक्स को शामिल नहीं किया क्योंकि वे सहायक नहीं होंगे। स्प्रेडशीट के उपयोगी होने के लिए बहुत सारे संयोजन हैं। प्रदर्शन के अनुकूलन के लिए एक अधिक उपयोगी तरीका प्रारंभिक लेआउट पैनलों को चुनने के लिए एक सामान्य समझ का उपयोग करना होगा और फिर वास्तविक स्थिति के विश्लेषण का उपयोग करके वहां से आवश्यकतानुसार अनुकूलित करना होगा।
N_A

धन्यवाद, आपका स्पष्टीकरण कैसे WPF पैनल वास्तव में प्रदान किया गया है, और प्रत्येक पैनल के माप / व्यवस्था का प्रदर्शन मैं क्या पूछ रहा था की तुलना में कहीं बेहतर है :)
राहेल

@ mydogisbox मैं UniformGridकहीं भी आपकी सूची में नहीं देखता । क्या आप उस पैनल के साथ अपने उत्तर को अपडेट कर पाएंगे और अन्य पैनल प्रकारों के संबंध में माप / व्यवस्था के प्रदर्शन का अनुमान लगा सकते हैं?
राचेल १

1
@Rachel UniformGridएप्लिकेशन लेआउट में उपयोग के लिए अभिप्रेत नहीं है। अधिक जानकारी के लिए यहां "व्युत्पन्न पैनल तत्व" देखें: msdn.microsoft.com/en-us/library/ms754152.aspx । स्पीड-वार यह ए की तुलना में थोड़ा तेज होना चाहिए DockPanelऔर ए की तुलना में थोड़ा धीमा होना चाहिए Canvas
N_A

12

शायद इससे आपको मदद मिलेगी।

न केवल पैनलों के लिए बल्कि हर उस एप्लिकेशन के लिए जो आप WPF में बनाना चाहते हैं।

यह WPF ड्राइंग और माप प्रदर्शन को समाप्त करता है।

इसमें अलग-अलग ऑपरेटिंग सिस्टम के लिए एक ड्राइंग टेस्ट एप्लिकेशन, परिणाम और निष्कर्ष जानकारी भी है, जिसे आप लक्षित करना चाहते हैं।


8

आपके द्वारा उल्लेखित पैनल लेआउट पैनल हैं, इसलिए लेआउट सिस्टम का एक संक्षिप्त अवलोकन बताता है कि यह संभवतः सबसे कुशल पैनल की एक सरल सूची नहीं होने जा रही है, लेकिन आप उन पैनलों का उपयोग कैसे करते हैं जो दक्षता और प्रदर्शन पर सबसे अधिक प्रभाव डालते हैं।

LayoutSystem_Overview :

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

हर बार जब एक बच्चा UIElement अपनी स्थिति बदलता है, तो उसमें लेआउट सिस्टम द्वारा एक नया पास ट्रिगर करने की क्षमता होती है। इसलिए, उन घटनाओं को समझना महत्वपूर्ण है जो लेआउट सिस्टम को लागू कर सकते हैं, क्योंकि अनावश्यक आह्वान से खराब आवेदन प्रदर्शन हो सकता है। निम्नलिखित उस प्रक्रिया का वर्णन करता है जो तब होती है जब लेआउट सिस्टम लागू होता है।

1. एक बच्चा UIElement पहले इसकी कोर गुणों को मापा द्वारा लेआउट प्रक्रिया शुरू करता है।

2. फ्रेमवर्क पर परिभाषित आकार गुणों का मूल्यांकन किया जाता है, जैसे कि चौड़ाई, ऊंचाई, और मार्जिन।

3. पैनल-विशिष्ट तर्क को लागू किया जाता है, जैसे डॉक दिशा या स्टैकिंग ओरिएंटेशन।

4. सभी बच्चों को मापने के बाद सामग्री की व्यवस्था की गई है।

5. बच्चों का संग्रह स्क्रीन पर तैयार किया गया है।

6. यदि अतिरिक्त बच्चों को संग्रह में जोड़ा जाता है, तो प्रक्रिया फिर से शुरू की जाती है, एक लेआउट ट्रांसफॉर्मर लागू किया जाता है, या UpdateLayout पद्धति को बुलाया जाता है।

बच्चों के मापन और व्यवस्था के बारे में अधिक जानकारी के लिए LayoutSystem_Measure_Arrange देखें

लेआउटसंरचना_संरचना :

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

इस बात से अवगत रहें कि कौन से संपत्ति मूल्य परिवर्तन लेआउट सिस्टम द्वारा एक पुनरावर्ती अद्यतन को बाध्य करेंगे।

निर्भरता गुण जिनके मान लेआउट सिस्टम को इनिशियलाइज़ कर सकते हैं सार्वजनिक झंडे के साथ चिह्नित हैं। AffMMeasure और AffectsArrange उपयोगी सुराग प्रदान करता है जिसके रूप में गुण मान परिवर्तन लेआउट सिस्टम द्वारा एक पुनरावर्ती अद्यतन के लिए बाध्य करेंगे। सामान्य तौर पर, किसी भी संपत्ति जो किसी तत्व के बाउंडिंग बॉक्स के आकार को प्रभावित कर सकती है, उसके पास एक AffectsMeasure झंडा होना चाहिए जो सही है। अधिक जानकारी के लिए, निर्भरता गुण अवलोकन देखें।

जब संभव हो, एक लेआउट ट्रांसफॉर्मर के बजाय एक रेंडरट्रांसफॉर्म का उपयोग करें।

उपयोगकर्ता इंटरफ़ेस (UI) की सामग्री को प्रभावित करने के लिए एक लेआउटट्रांसफॉर्म एक बहुत ही उपयोगी तरीका हो सकता है। हालांकि, यदि परिवर्तन के प्रभाव को अन्य तत्वों की स्थिति को प्रभावित नहीं करना है, तो इसके बजाय एक रेंडरट्रांसफॉर्म का उपयोग करना सबसे अच्छा है, क्योंकि रेंडरट्रांसफॉर्म लेआउट सिस्टम को लागू नहीं करता है। LayoutTransform अपने परिवर्तन को लागू करता है और प्रभावित तत्व की नई स्थिति के लिए एक पुनरावर्ती लेआउट अद्यतन को मजबूर करता है।

UpdateLayout को अनावश्यक कॉल से बचें।

UpdateLayout पद्धति एक पुनरावर्ती लेआउट अद्यतन को बाध्य करती है, और अक्सर आवश्यक नहीं होती है। जब तक आप सुनिश्चित नहीं हैं कि पूर्ण अपडेट की आवश्यकता है, तब तक इस पद्धति को आपके लिए कॉल करने के लिए लेआउट सिस्टम पर भरोसा करें।

बड़े बच्चों के संग्रह के साथ काम करते समय, एक नियमित स्टैकपैनल के बजाय एक वर्चुअलाइज़िंगस्टैकपैनल का उपयोग करने पर विचार करें।

चाइल्ड कलेक्शन को वर्चुअलाइज करके, वर्चुअलाइज़िंगस्टैकप्नेल केवल उन वस्तुओं को मेमोरी में रखता है जो वर्तमान में माता-पिता के व्यूपोर्ट के भीतर हैं। परिणामस्वरूप, अधिकांश परिदृश्यों में प्रदर्शन में काफी सुधार हुआ है।

ऑप्टिमाइज़िंग प्रदर्शन: लेआउट और डिज़ाइन : यह लेख विस्तार से बताता है कि पेड़ को कुशलता से कैसे बनाया जाए और उनकी जटिलता के आधार पर पैनलों की एक सरल सूची दी जाए

कैनवास (कम से कम संकलन = अधिक कुशल और बेहतर प्रदर्शन)

ग्रिड

अन्य पैनल (अधिक जटिल = कम कुशल और बदतर प्रदर्शन)

ध्यान देने के लिए अन्य प्रदर्शन विचार: WPF UI रेंडरिंग गति को बेहतर बनाने के तरीके

  1. सब कुछ कैश। ब्रश, रंग, ज्यामिति, स्वरूपित ग्रंथ, ग्लिफ़। (उदाहरण के लिए हमारे पास दो कक्षाएं हैं: रेंडरटूल और टेक्स्टचेचे। दोनों इकाइयों के साझा करने के लिए प्रत्येक इकाई पते की रेंडरिंग प्रक्रिया। इसलिए यदि दो चार्टों में एक ही पाठ है, तो इसकी तैयारी को केवल एक बार निष्पादित किया जाता है।)
  2. फ्रीज को फ्रीज करें, यदि आप लंबे समय तक इसका उपयोग करने की योजना बना रहे हैं। विशेष रूप से ज्यामितीय। कॉम्प्लेक्स अनफ्रीज्ड जियोमेट्रीज हिटटेस्ट को बेहद धीमी गति से निष्पादित करते हैं।
  3. प्रत्येक आदिम के प्रतिपादन के सबसे तेज़ तरीके चुनें। उदाहरण के लिए, टेक्स्ट रेंडरिंग के लगभग 6 तरीके हैं, लेकिन सबसे तेज़ है ड्रॉइंग कॉन्टेक्स्ट।ड्राग्लिफ़्स।
  4. कंटेनर पुनर्चक्रण सक्षम करें। वर्चुअलाइजेशन कई प्रदर्शन सुधार लाता है, लेकिन कंटेनरों को निपटाया और फिर से बनाया जाएगा, यह डिफ़ॉल्ट है। लेकिन आप VirtualizingStackPanel.VirtualizationMode = "पुनर्चक्रण" सेट करके कंटेनरों को रीसायकल करके अधिक प्रदर्शन प्राप्त कर सकते हैं
  5. से यहाँ : वहाँ घोंसला बनाने से है कि आपके आवेदन का समर्थन कर सकते की राशि के लिए कोई व्यावहारिक सीमा नहीं है, तथापि, यह आमतौर पर सबसे अच्छा केवल उन पैनलों कि वास्तव में अपने इच्छित लेआउट के लिए आवश्यक हैं का उपयोग करने के लिए आपके आवेदन को सीमित करने के लिए है। कई मामलों में, लेआउट कंटेनर के रूप में लचीलेपन के कारण नेस्टेड पैनलों के बजाय ग्रिड तत्व का उपयोग किया जा सकता है। यह पेड़ से अनावश्यक तत्वों को निकालकर आपके आवेदन में प्रदर्शन बढ़ा सकता है।

2
इस उत्तर में अन्य स्रोतों से लगभग पूरी तरह से नकल और चिपकाना शामिल है, कुछ अप्राप्य। यह बहुत बेहतर होगा यदि आप इसे केवल संबंधित भागों तक ट्रिम कर दें, सभी स्रोतों को सही ढंग से जिम्मेदार ठहराया और प्रश्न का अधिक सीधे उत्तर देने की कोशिश की।
N_A

2
@mydogisbox उत्तर जानकारी का संकलन है, उन्हीं साइटों में से कई जिनका आपने अपने उत्तर में उपयोग किया था, मैं जोड़ सकता हूं। प्रदर्शन को बदलने वाले अन्य पहलुओं पर ध्यान नहीं देने के लिए अधूरा जवाब या पूछने वाले के पास अभी भी अतिरिक्त प्रश्न हो सकते हैं, इसलिए मैंने उन्हें शामिल करने के लिए चुना। जबकि राहेल एक अद्भुत 21.7K प्रतिनिधि और बहुत सारे WPF अनुभव के साथ पहले से ही इस जानकारी को जान सकता है, जो इस प्रश्न को देख रहे हैं, इस अतिरिक्त और उत्तर देने वाली जानकारी की इच्छा कर सकते हैं।
एरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.