मैं हाल ही में एक आरटीएफ संपादक जो केवल एक साधारण UserControl
PreviewTextInput
और PreviewMouseUp
की तरह एक जोड़े घटनाक्रम के साथ एक RichTextBox
है कि विकासशील किया गया है कारण बनता है।RichTextBox - यूआई आकार बहुत बड़ा सीपीयू लोड
मैंने कुछ परेशान हालांकि देखा। यूआई का आकार बदलने पर RichTextBox
का प्रदर्शन बिल्कुल भयानक है और RichTextBox
में इसके रैपिंग एल्गोरिदम को आग लगने के लिए बहुत सारे टेक्स्ट हैं।
यह एप्लिकेशन को वास्तव में मैला महसूस करता है, जैसे कि यह खराब रूप से अनुकूलित है (भले ही यह नहीं है)।
पहले मैंने टेक्स्ट का चयन करते समय यह प्रदर्शन हिट देखा, इसलिए SelectionChanged
ईवेंट का उपयोग करने के बजाय, मैंने PreviewMouseUp
ईवेंट का उपयोग करने का निर्णय लिया और फिर चयन प्राप्त किया।
फिर आगे परीक्षण के बाद मुझे पता चला कि आकार में भारी भार भी हुआ है। और मैं 5% -> 30% के बीच लोड के बारे में बात कर रहा हूं जिसमें क्वाड-कोर सीपीयू 3.8GHz पर चल रहा है!
आगे इसे बाहर का परीक्षण करने के लिए, मैं अपने RichTextBox
बाहर टिप्पणी करने का फैसला किया और केवल एक नया RichTextBox
कोई परिभाषित संपत्ति
<RichTextBox/>
एक विंडो में इस सम्मिलित करना, पाठ के साथ भरने, और उसके बाद के लिए विंडो का आकार बदलने के साथ शामिल रैपिंग एल्गोरिदम ने फिर से वही किया, 30% तक उपयोग!
मैं इस मामले के बारे में अनुसंधान करने के लिए करने की कोशिश की, और ज्यादातर लोगों आदेश रैपिंग को रोकने के लिए उच्च मूल्यों के लिए PageWidth
स्थापित करने की सिफारिश करने समाप्त हो गया:
richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
richTextBox1.Document.PageWidth = 1000;
कौन सा मैं नहीं चाहता कि चाहते हैं, संपादक के पिछले संस्करण के बाद से मैंने WinForms के साथ लिखा था और आसानी से लपेट सकता था, और मैं इसे नए WPF संस्करण में भी चाहता हूं।
क्या किसी और को कभी इस समस्या का सामना करना पड़ा? यदि हां, तो क्या आप हार्डवेयर पर इस विशाल तनाव को दूर करने के लिए मुझे सही दिशा में इंगित कर सकते हैं?
मुझे थोड़ा दुःख है क्योंकि मुझे डब्ल्यूपीएफ पसंद है, लेकिन मुझे एक या अन्य ऑब्जेक्ट मिला जो वास्तव में अनौपचारिक है और/या WinForms समकक्ष की तुलना में व्यावहारिक नहीं है, RichTextBox
उन मामलों में से एक है :(
पाठ की बड़ी राशि के लिए क्षमा करें, लेकिन मैं वास्तव में इस बड़े करीने से मामले में कुछ अन्य गरीब आत्मा इस मुद्दे का सामना कर रहा है और तुम लोगों को देखने के लिए क्या मैं अब तक की कोशिश की है के लिए दस्तावेज़ करना चाहता था।
मजेदार कैसे मैंने स्पष्ट विकल्प के बारे में नहीं सोचा जो कि Resize कॉल ला रहा है, मुझे लगता है कि मैं बहुत थक गया हूं। आपके कोड में एक त्रुटि है जहां आप बीटीडब्ल्यू को आमंत्रित करने का प्रयास कर रहे हैं, निम्नलिखित इसे सुधारता है: डिस्पैचर।आमंत्रित करें (नई क्रिया (() => {})); –
वैसे, टाइमर का उपयोग इस स्थिति में जोखिम भरा है, क्योंकि पीसी के प्रदर्शन के आधार पर, घटना वास्तव में अभी भी आकार बदल सकती है या नहीं, मेरे मामले में मुझे इसके लिए 300ms का उपयोग कम से कम काम करना था, लेकिन यह निश्चित रूप से मुझे सही दिशा में इंगित करता है, मैं इसे अपनी आवश्यकता के अनुरूप बदलने के लिए बदल रहा हूं, अंततः टाइमर से छुटकारा पा रहा हूं। धन्यवाद। –
यदि आप यह जानने में भी रुचि रखते हैं कि यह प्रदर्शन-वार कैसे है, इससे मुझे ओवरहेड को 50% तक कम करने में मदद मिली है, अब यह बहुत कम टेक्स्ट अंदर है, तो आकार बदलते समय 15% उपयोग पर है, आईएमओ रिचटेक्स्टबॉक्स एक बड़ी गड़बड़ी है प्रदर्शन की वजह से, ऐसा लगता है कि रैप एल्गोरिदम इन मुद्दों के कारण एकमात्र कारक नहीं है, वैसे भी, मुझे सही दिशा में इंगित करने के लिए एक बार फिर धन्यवाद;) –