हमारी टीम को प्रदर्शन प्रस्तुत करने की समस्याओं का सामना करना पड़ा । हमारे मामले में हमारे पास लगभग 400 परिवहन इकाइयां हैं और हमें प्रत्येक इकाई के चार्ट को बहुत सारे विवरण (पाठ लेबल, विशेष अंक, विभिन्न ज्यामिति इत्यादि) प्रस्तुत करना चाहिए।
पहले हमारे कार्यान्वयन में हमने प्रत्येक चार्ट को प्राइमेटिव में विभाजित किया और बाध्यकारी के माध्यम से पूरे इकाई के चार्ट को बनाया। यह बहुत दुखी विलुप्त था। यूआई प्रतिक्रिया बहुत धीमी थी।
इसलिए हमने प्रत्येक इकाई के लिए एक UI तत्व बनाने का निर्णय लिया, और DrawingContext के साथ चार्ट प्रस्तुत किया। हालांकि यह प्रदर्शन पहलू में काफी बेहतर था, लेकिन हमने एक महीने में प्रतिपादन में सुधार किया।
कुछ सलाह:
- कैश सब कुछ। ब्रश, रंग, ज्यामिति, स्वरूपित ग्रंथ, ग्लिफ। (। उदाहरण के लिए हम दो वर्गों है:।। दोनों वर्गों की साझा उदाहरण के लिए
RenderTools
और प्रत्येक इकाई पतों की TextCache
प्रतिपादन प्रक्रिया तो अगर दो चार्ट टेक्स्ट समान है, इसकी तैयारी सिर्फ एक बार निष्पादित किया जाता है)
- फ्रीज
Freezable
, आप अगर लंबे समय तक इसका इस्तेमाल करने की योजना बना रहे हैं। विशेष रूप से ज्यामिति। जटिल unfreezed ज्यामिति HitTest बेहद धीमी गति से निष्पादित।
- प्रत्येक आदिम के प्रतिपादन के सबसे तेज़ तरीके चुनें। उदाहरण के लिए, पाठ प्रतिपादन के लगभग 6 तरीके हैं, लेकिन सबसे तेज़
DrawingContext.DrawGlyphs
है।
- हॉट स्पॉट खोजने के लिए प्रोफाइलर का उपयोग करें। उदाहरण के लिए, हमारी परियोजना में हमारे पास ज्यामिति कैश थी और मांग पर उचित रूप से प्रस्तुत किया गया था। ऐसा लगता है कि कोई सुधार संभव नहीं है। लेकिन एक दिन हमने सोचा कि क्या होगा यदि हम एक बार ज्यामिति प्रस्तुत करेंगे और तैयार दृश्यों को कैश करेंगे? हमारे मामले में ऐसा दृष्टिकोण स्वीकार्य हुआ। हमारे यूनिट के चार्ट में केवल कई राज्य हैं। जब चार्ट का डेटा बदल जाता है, तो हम प्रत्येक राज्य के लिए DrawingVisual का पुनर्निर्माण करते हैं और उन्हें कैश में डाल देते हैं।
बेशक, इस तरह से कुछ निवेश की जरूरत है, यह सुस्त और उबाऊ काम है, लेकिन परिणाम शानदार है।
वैसे: जब हमने डब्ल्यूपीएफ कैशिंग विकल्प चालू किया (आपको जवाब में लिंक मिल सकता है), तो हमारा ऐप लटका हुआ था।
स्रोत
2011-03-23 10:56:45
क्या आप कुछ संख्या दे सकते हैं? प्रति खिड़की आदि के नियंत्रण की संख्या आदि – NVM
@NVM व्यावहारिक रूप से, अब यह प्रति विंडो के बारे में एक हजार कस्टम नियंत्रण है (कस्टम नियंत्रण में कई सीमाएं, टेक्स्टब्लॉक होते हैं और इसमें लगभग दर्जन निर्भरता गुण होते हैं)। नियंत्रण की संख्या बढ़ सकती है। लेकिन पहले से ही इस मात्रा में इनटाइटल प्रतिपादन पर खुद को देखने के लिए कुछ असुविधाजनक संख्याएं लगती हैं। इसके अतिरिक्त यह ज़ूम अप होने पर अच्छी चिकनी स्क्रॉलिंग प्रदान नहीं करता है। – rem
मुझे उपयोगकर्ता के सामने एक ही समय में एक हजार टेक्स्ट बॉक्स वाले UI को विज़ुअलाइज़ करना मुश्किल लगता है। वैसे भी, सब कुछ व्यवस्थित करने के तरीके के आधार पर आप या तो वर्चुअलाइजिंग पैनलों में से एक का उपयोग कर सकते हैं या अपना खुद का कस्टम लिख सकते हैं जो केवल दिखाई देने वाले नियंत्रण बनाएगा। इससे चीजों को काफी तेज करना चाहिए। – NVM