2009-08-13 7 views
10

मैं जानना चाहता हूं कि .NET में विशेषताओं का उपयोग, विशेष रूप से सी # महंगा है, और क्यों या क्यों नहीं?क्या यह .NET (C#) महंगा में विशेषता का उपयोग करता है?

मैं विशेष रूप से सी # के बारे में पूछ रहा हूं, जब तक कि विभिन्न .NET भाषाओं के बीच कोई अंतर न हो (क्योंकि बेस क्लास लाइब्रेरी समान हैं?)।

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

क्या व्यय का प्रश्न कार्यान्वयन विशिष्ट विवरणों पर निर्भर करता है? आईएल में संकलित गुण कैसे हैं? क्या वे स्वचालित रूप से कैश किए जाते हैं, या यह कार्यान्वयनकर्ता के लिए है?

+3

सीएलआर से चलने वाली किसी भी .NET भाषा के बीच कोई अंतर नहीं है। सुनिश्चित नहीं है कि डीएलआर तस्वीर में कैसे फिट बैठता है, लेकिन एक बार संकलित, सी # और वीबी.नेट (और कोई अन्य सीएलआर भाषा) समान हैं। –

उत्तर

19

"गुणों का उपयोग" बहुत अस्पष्ट है। गुणों को प्राप्त करना प्रभावी रूप से एक प्रतिबिंब ऑपरेशन है - आप नियमित रूप से इसे लूप में नहीं करना चाहते हैं - लेकिन मेटाडेटा में शामिल होने के लिए वे महंगे नहीं हैं, और सामान्य उपयोग पैटर्न (आईएमओ) कुछ अन्य प्रतिनिधित्व (उदाहरण के लिए) बनाना है। एक बार मेमोरी स्कीमा) गुणों को एक बार पढ़ने के बाद।

कुछ कैशिंग शामिल हो सकते हैं, लेकिन शायद मैं अन्य प्रतिनिधित्व को कैश कर दूंगा। उदाहरण के लिए, यदि मैं विवरण के साथ enum मूल्यों को सजा रहा था, तो मैं आम तौर पर enum शब्दकोश (या इसके विपरीत) के लिए स्ट्रिंग बनाने के लिए गुण गुणों को प्राप्त करता हूं।

+0

क्या आपको लगता है एक सुरक्षित रूप से मान सकते हैं कि गुण (या उनमें से कुछ प्रतिनिधित्व) कि नेट बीसीएल और का हिस्सा हैं अन्य माइक्रोसॉफ्ट फ़्रेमवर्क/एडऑन, कैश नहीं किया जाता? –

+1

फिर, यह थोड़ा अस्पष्ट है। यदि आप एक बहुत ही विशिष्ट उदाहरण दे सकते हैं और कैसे कोई यह निर्धारित कर सकता है कि वे कैश किए गए हैं या नहीं, तो यह उत्तर देने के लिए एक और उचित सवाल होगा। –

6

यह आप उनका उपयोग कैसे पर निर्भर करता है ... कुछ गुण सिर्फ जानकारी उद्देश्य (उदाहरण के लिए ObsoleteAttribute) के लिए हैं, इसलिए वे क्रम प्रदर्शन पर कोई प्रभाव नहीं है। अन्य विशेषताओं का उपयोग कंपाइलर (जैसे DllImportAttribute) या PostSharp जैसे पोस्ट-कंपाइलर्स द्वारा किया जाता है, इसलिए लागत संकलन समय पर होती है, रन-टाइम नहीं। हालांकि, यदि आप रनटाइम पर विशेषताओं का निरीक्षण करने के लिए प्रतिबिंब का उपयोग करते हैं, तो यह महंगा हो सकता है।

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