2013-12-17 4 views
8

मैं प्रोग्रामिंग के लिए बिल्कुल नया हूं और ओओपी के सीमित ज्ञान के साथ मेरी कक्षाओं के बीच संवाद करने के लिए घटनाओं का उपयोग करने का फैसला किया है। स्वाभाविक रूप से, इससे कुछ घटनाएं हो जाएंगी।घटनाओं का उपयोग करने में कितना प्रदर्शन ओवरहेड है?

मैं जानना चाहता था कि घटनाओं का उपयोग करने के लिए कोई अतिरिक्त ओवरहेड है या नहीं? मैं मानता हूं कि जब तक कोई घटना नहीं होती है (यानी, उस वर्ग में श्रोता होता है जो घटना के आधार पर एक समारोह निष्पादित करता है), तो वास्तव में बहुत अधिक प्रभाव नहीं होना चाहिए। लेकिन मैं सी # में घटनाओं से घनिष्ठ परिचित नहीं हूं और सिर्फ यह पुष्टि करना चाहता हूं कि किसी घटना को फायर करने के लिए पर्याप्त अतिरिक्त ओवरहेड है या नहीं?

+0

"महत्वपूर्ण" कितना है? –

+0

शायद महत्वपूर्ण नहीं है ... मल्टीकास्ट प्रतिनिधियों के लिए खोज करने का प्रयास करें ... यह एक और नाम है कि ईवेंट .NET में कैसे काम करते हैं। यह भी देखें http://stackoverflow.com/questions/304770/does-using-delegates-slow-down-my-net-programs –

+0

मैंने आपका शीर्षक संपादित किया है। कृपया देखें, "[प्रश्नों में उनके शीर्षक में" टैग "शामिल होना चाहिए?] (Http://meta.stackexchange.com/questions/19190/)", जहां आम सहमति है "नहीं, उन्हें नहीं करना चाहिए"। –

उत्तर

11

मैं जानना चाहता था कि घटनाओं का उपयोग करने के लिए कोई अतिरिक्त ओवरहेड है या नहीं? मैं मानता हूं कि जब तक कोई घटना नहीं होती है (यानी, उस वर्ग में श्रोता होता है जो घटना के आधार पर एक समारोह निष्पादित करता है), तो वास्तव में बहुत अधिक प्रभाव नहीं होना चाहिए। बी

सामान्यतः, यह सच है। एक घटना लेकिन मंगलाचरण सूची की जांच कोई कार्य नहीं करेगा ऊपर उठाने के लिए मानक पैटर्न अगर वहाँ ग्राहक हैं को देखने के लिए, और वापसी अगर कोई श्रोताओं, जो ज्यादातर मामलों में प्रदर्शन के मामले में बहुत छोटे होंगे रहे हैं, और होने की संभावना नहीं होने जा रहा है एक मुद्दा।

यहां तक ​​कि जब ग्राहक हैं, तब भी घटनाओं का उपयोग करने का ओवरहेड अभी भी मामूली मामूली है, क्योंकि वे प्रभावी रूप से एक प्रतिनिधि आमंत्रण द्वारा ग्राहकों के हैंडलर को बुला रहे हैं, जो अभी भी अपेक्षाकृत तेज़ है (हालांकि प्रत्यक्ष विधि कॉल से धीमा है)। जब तक आप इसे बहुत तंग लूप में नहीं कर रहे हैं, तब तक यह महत्वहीन होने की संभावना है।

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

8

क्या घटनाओं का उपयोग करने के लिए कोई अतिरिक्त ओवरहेड है?

वैसे, हाँ - आप एक MulitcastDelegate शामिल है, कोड यदि एक ईवेंट हैंडलर वास्तव में जुड़ा हुआ है देखने के लिए जाँच, आदि

वहाँ महत्वपूर्ण अतिरिक्त भूमि के ऊपर बस एक घटना बंद फायरिंग के लिए है?

आह - असली सवाल। ओवरहेड है, लेकिन यह महत्वपूर्ण है? इसका उत्तर केवल द्वारा मापने का उत्तर दिया जा सकता है।

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

+0

सभी को धन्यवाद :) –

2

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

एक बात से सावधान रहना एक प्रकाशित घटना का दायरा है। आप ऐसी परिस्थिति में समाप्त हो सकते हैं जहां किसी दिए गए कार्यक्रम के दर्जनों ग्राहक हैं, लेकिन वास्तव में केवल एक या दो वास्तव में घटना के दिए गए उदाहरण के बारे में परवाह करते हैं। यह एक महत्वपूर्ण ओवरहेड का कारण बन सकता है। इस संदर्भ में, System.Observable प्रतिक्रियाशील-प्रोग्रामिंग प्रतिमान में यह सार्थक लग सकता है। यह आपको उन ग्राहकों पर केवल हैंडलर को आमंत्रित करने की इजाजत देकर ओवर-ब्रॉडकास्टिंग को सीमित करने में मदद कर सकता है जो वास्तव में किसी दिए गए ईवेंट की परवाह करते हैं।

+0

ऐसा कुछ है जिसे मैंने पहले नहीं सोचा था, इसका उल्लेख करने के लिए धन्यवाद। –

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