2009-12-17 12 views
22

संभव डुप्लिकेट:
Perfomance of TypeCastingऑब्जेक्ट कास्टिंग कितना महंगा है?

यह एक किसी अन्य वस्तु के रूप में वस्तु के रूप में कास्ट करने के लिए कैसे महंगा है?

CustomClass instance = GenericObject as CustomClass 

क्या इसे सभी लागतों से बचा जाना चाहिए?

यह देखना चाहते हैं कि दूसरे इस बारे में कैसे सोचते हैं। मुझे यकीन है कि यह बहुत परिस्थितिपूर्ण है।

उत्तर

44

आपको विशिष्ट भाषा विशेषताओं के प्रदर्शन प्रभावों के बारे में चिंता करने से बचना चाहिए जब तक आपके पास विशिष्ट साक्ष्य (माप) नहीं हैं कि वे वास्तव में समस्या पैदा कर रहे हैं।

आपकी प्राथमिक चिंताओं को कोड की शुद्धता और इसकी रखरखाव होना चाहिए।

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

अधिकांश वास्तविक दुनिया प्रदर्शन समस्याएं एल्गोरिदम विकल्पों या प्लेटफॉर्म के बारे में जागरूकता की कमी से उभरती हैं - विशिष्ट भाषा सुविधाओं से नहीं।

+50

हो सकता है कि आप अंत में __ ओवरहेड प्रकार कास्टिंग__ के बारे में थोड़ी सी चीज़ जोड़ सकें। सलाह लेना अच्छा लगता है, लेकिन यह सवाल का जवाब नहीं देता है। –

+0

एक अलग प्रश्न का एक अच्छा जवाब। – Acidic

18

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

कास्टिंग के साथ वास्तविक समस्या यह है कि यह धोखाधड़ी प्रकार की सुरक्षा है। यदि आप सावधान नहीं हैं, तो यदि आप जगह पर चीजें डालते हैं तो बग को पेश करना या कोड की पठनीयता कम करना बहुत मुश्किल नहीं है।

4

यदि आप जेनरिक का उपयोग कर सकते हैं तो यह कास्टिंग से बेहतर समाधान है। बॉक्सिंग और अनबॉक्सिंग एक महंगा ऑपरेशन है जिसे संभव होने पर टालना चाहिए। समस्या कभी-कभी इसे टाला नहीं जा सकता है।

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

+1

मुझे नहीं लगता कि मुक्केबाजी यहां लागू होती है क्योंकि ओपी ऑब्जेक्ट को ऑब्जेक्ट कास्टिंग करने के बारे में पूछ रहा है, ऑब्जेक्ट के लिए मूल्य नहीं। –

2

आम तौर पर, विज्ञापन के आधार पर किसी ऑब्जेक्ट को कास्ट करने की लागत चीजों के बड़े पैमाने पर कम होती है। हालांकि, यदि आप बार-बार ऑब्जेक्ट्स को कई बार कास्टिंग कर रहे हैं तो वह तब होता है जब आपको इसे टालने का प्रयास करना चाहिए यदि आपको लगता है कि यह प्रदर्शन समस्या का कारण है।

सब के बाद, 2.0 के लिए .NET 1.1 से मुख्य सुधार में से एक जेनेरिक्स के परिचय था - इस मुद्दे को संबोधित किया की दृढ़ता से लिखा जाता है (उदाहरण के लिए ArrayList = वस्तु के आधार पर, सूची = टाइप किया सूची) वस्तुओं की सूची

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