2010-09-02 10 views
14

CompositionTarget.Rendering इवेंट एक सादा पुराना इवेंट हैडलर है, जिसमें एक सादे पुराने इवेंट आर्ग्स हैं। हालांकि, वास्तविक जीवन में, यह स्पष्ट रूप से हमेशा RenderingEventArgs का उदाहरण प्राप्त करता है। तो आपके ईवेंट हैंडलर को उनसे उपयोगी जानकारी प्राप्त करने के लिए EventArgs कास्टिंग करके प्रारंभ करना होगा।CompositionTarget.Rendering RenderingEventArgs के बजाय EventArgs क्यों लेता है?

क्यों प्रकार EventHandler<RenderingEventArgs> की घटना नहीं है, तो हम और अधिक आसानी से बहस करने के लिए मिल सकता है (और अधिक महत्वपूर्ण है, तो हम यह भी पता कर सकता है तर्क वहाँ कर रहे हैं)? माइक्रोसॉफ्ट ने इस घटना को गलत हस्ताक्षर देने का विकल्प क्यों चुना होगा?

मुझे पिछड़ा संगतता के बारे में आश्चर्य हुआ - क्या वहां एक रिलीज़ था जहां RenderingEventArgs अभी तक मौजूद नहीं था? - लेकिन ऐसा लगता है कि यह मामला नहीं है। एमएसडीएन के मुताबिक, दोनों प्लेटफार्मों पर एक ही रिलीज में रेन्डरिंगएवेंट आर्ट्स और कंपोजिटेशन टार्गेट को पेश किया गया था - डब्ल्यूपीएफ में, दोनों को .NET 3.0 में जोड़ा गया था; सिल्वरलाइट में, दोनों सिल्वरलाइट 3.0 में जोड़े गए थे।

यदि यह किसी भी प्रकार का इशारा देता है, तो मैं एक पुराने discussion thread में भाग गया जहां किसी ने कहा, "प्रतिनिधि इवेंटआर्ग का उपयोग कर रहा है क्योंकि ऐसा करने से मार्शलिंग पर कुछ प्रकार की प्रदर्शन जीत होती है।" अगर कोई यह समझा सकता है कि किस प्रकार की प्रदर्शन जीत हो सकती है, तो मैं इसे उत्तर के रूप में स्वीकार करने के इच्छुक हूं।

+0

+1: वही बात माउस घटनाओं के साथ भी होती है। * कूल * गुणों पर जाने के लिए आपको अक्सर उन्हें अधिक विशिष्ट MouseEventArgs में मैन्युअल रूप से बदलने की आवश्यकता होती है। –

उत्तर

2

मार्शलिंग जीत संभवतः निम्न स्तर की मेमोरी प्रबंधन चीज है। चूंकि EventArgs किसी ईवेंट के लिए तर्क का सबसे आम रूप है, इसलिए प्लगइन के निम्न स्तर के ईवेंट हैंडलिंग कार्यान्वयन में प्री-आवंटित बफर होने की संभावना है। यह केवल कुछ प्लेटफॉर्म पर और केवल गहन प्रतिपादन के साथ ही एक जीत हो सकती है।

नवीनतम एसएल संस्करणों में रेंडरिंग गति में काफी सुधार हुआ है और मुझे संदेह है कि यह इस तरह के बदलाव है जो इसे चला रहे हैं।

यह दर्द होता है जब इंटरफ़ेस कार्यान्वयन के कारण पीड़ित होता है लेकिन जीत महत्वपूर्ण है तो यह एक उचित व्यापार है। इसके अलावा, इस मामले में कार्यक्षमता के लिए कोई वास्तविक हानि नहीं है क्योंकि इसे कास्ट करना और अंतर्निहित डेटा प्राप्त करना काफी आसान है।

संबंधित मुद्दे