वास्तव में अप्रबंधित संसाधन क्या हैं?


159

मैं अप्रबंधित संसाधनों के बारे में जानना चाहता हूं। क्या कोई मुझे एक मूल विचार दे सकता है?


इस पृष्ठ को भी देखें, जिसमें आईडीसोपायरी के उचित उपयोग के लिए एक शानदार व्याख्या और पैटर्न दिया गया है, और अप्रबंधित संसाधनों को कैसे ध्यान में रखा जाए: stackoverflow.com/questions/538060/…
काइल बारन

जवाबों:


177

प्रबंधित संसाधनों का अर्थ मूल रूप से "प्रबंधित मेमोरी" है जो कचरा कलेक्टर द्वारा प्रबंधित किया जाता है। जब आपके पास अब प्रबंधित ऑब्जेक्ट (जो प्रबंधित मेमोरी का उपयोग करता है) का कोई संदर्भ नहीं है, तो कचरा संग्रहकर्ता (अंततः) आपके लिए उस मेमोरी को जारी करेगा।

मानव रहित संसाधन तब सब कुछ हैं, जिसके बारे में कचरा कलेक्टर को पता नहीं है। उदाहरण के लिए:

  • खुली फ़ाइलें
  • नेटवर्क कनेक्शन खोलें
  • अनवांटेड मेमोरी
  • XNA में: वर्टेक्स बफ़र्स, इंडेक्स बफ़र्स, टेक्सचर आदि।

आम तौर पर आप उन अप्रबंधित संसाधनों को जारी करना चाहते हैं इससे पहले कि आप उन सभी संदर्भों को खो दें जो आपके पास उनके प्रबंधन के उद्देश्य हैं। आप Disposeउस वस्तु पर कॉल करके ऐसा करते हैं , या (C # में) उस usingस्टेटमेंट का उपयोग करते हैं जो Disposeआपके लिए कॉलिंग को हैंडल करेगा ।

यदि आप Disposeअपने मानव रहित संसाधनों की सही ढंग से उपेक्षा करते हैं, तो कचरा संग्राहक अंततः आपके लिए इसे संभाल लेंगे जब उस संसाधन युक्त वस्तु को एकत्र किया जाता है (यह "अंतिम रूप" है)। लेकिन क्योंकि कूड़ा उठाने वाले ने मानव रहित संसाधनों के बारे में नहीं जाना है, इसलिए यह नहीं बता सकता है कि इसे जारी करने के लिए कितनी बुरी तरह से ज़रूरत है - इसलिए यह आपके प्रोग्राम के लिए खराब प्रदर्शन या संसाधनों से पूरी तरह से बाहर चलाने के लिए संभव है।

यदि आप अपने आप को एक वर्ग लागू करते हैं जो अप्रबंधित संसाधनों को संभालता है, तो इसे लागू करना Disposeऔर Finalizeसही ढंग से लागू करना आपके ऊपर है।


7
ओपन डाटाबेस कनेक्शन किस श्रेणी के अंतर्गत आता है? प्रबंधित / अप्रबंधित?
देवीप्रसाद दास

8
+1 अन्य उत्तर उस महत्वपूर्ण बिंदु को याद करते हैं जिसे आप डिस्पोजल प्रबंधित ऑब्जेक्ट पर कहते हैं जो आंतरिक रूप से अप्रबंधित संसाधन को मुक्त करता है जो इसे लपेटता है (जैसे फ़ाइल हैंडल, GDI + बिटमैप, ...) और यदि आप अप्रबंधित संसाधनों को सीधे एक्सेस करते हैं। PInvoke आदि) आपको इसे संभालने की आवश्यकता है।
इयान मर्सर

2
@ डेव: अनवांटेड - जैसा कि जीसी इसके बारे में नहीं जानता है (यह मानते हुए कि आप कुछ काल्पनिक-इन-मेमोरी मेमोरी का उपयोग नहीं कर रहे हैं)। लेकिन कनेक्शन ऑब्जेक्ट अपने आप में एक अप्रबंधित संसाधन नहीं रख सकता है। संभवतः डेटाबेस कनेक्शन कहीं एक खुली फ़ाइल या नेटवर्क कनेक्शन का उपयोग करता है - लेकिन यह संभव है कि एक अन्य ऑब्जेक्ट (कनेक्शन ऑब्जेक्ट के अलावा) उस अप्रबंधित संसाधन (शायद आपके डेटाबेस लाइब्रेरी कैश कनेक्शन) को संभाल रहा है। प्रलेखन की जांच करें और देखें कि यह आपको कॉल करने Disposeया उपयोग करने के लिए कहां कहता है using
एंड्रयू रसेल

11
मेरे पास इस पर एक बुनियादी टिप्पणी / प्रश्न है, क्या मैं किसी वस्तु को प्रबंधित / संयुक्त राष्ट्र के द्वारा प्रबंधित कर सकता हूं, उदाहरण के लिए, उदाहरण के लिए, स्ट्रिंग का प्रबंधन किया गया है, डेटासेट संयुक्त राष्ट्र का प्रबंधन है (यही कारण है कि इसका निपटान (विधि) है) , डेटाबेस कनेक्शन संयुक्त राष्ट्र के प्रबंधित हैं (क्योंकि उनका निपटान है), आदि। तो यह धारणा है, अगर इसमें "डिस्पोज़ ()" विधि है, तो यह संयुक्त राष्ट्र प्रबंधित है? इसके अलावा, एक XmlDocument ऑब्जेक्ट क्या होगा? धन्यवाद
Ganders

15
@ वांडर्स जो अंगूठे का एक अच्छा नियम है। यद्यपि यह ध्यान रखें कि सभी C # वर्ग उदाहरण प्रबंधित ऑब्जेक्ट हैं। यदि किसी वर्ग का उदाहरण अप्रबंधित संसाधनों को पकड़ सकता है , तो उस वर्ग को लागू करना चाहिएIDisposable । एक वर्ग तो करता है को लागू IDisposableहै, तो आप चाहिए साथ उस वर्ग के उदाहरणों के निपटान usingया Dispose()जब आप उन लोगों के साथ किया जाता है। इसके आधार पर, आपका कॉन्सेप्ट धारण करता है: यदि कोई वर्ग लागू करता है IDisposable, तो यह संभवतः मानव रहित संसाधनों को आंतरिक रूप से रखता है।
एंड्रयू रसेल

56

कुछ उपयोगकर्ता प्रबंधित संसाधनों के बीच खुली फाइलें, डीबी कनेक्शन, आवंटित मेमोरी, बिटमैप, फ़ाइल स्ट्रीम आदि को रैंक करते हैं, अन्य जो अप्रबंधित हैं। तो क्या वे प्रबंधित या अप्रबंधित हैं?

मेरी राय है, कि प्रतिक्रिया अधिक जटिल है: जब आप फ़ाइल को .NET में खोलते हैं, तो आप शायद कुछ अंतर्निहित .NET क्लास System.IO.File, FileStream या कुछ और का उपयोग करते हैं। क्योंकि यह एक सामान्य .NET क्लास है, इसलिए इसे मैनेज किया जाता है। लेकिन यह एक आवरण है, जो अंदर "गंदे काम" करता है (Win32 dlls का उपयोग करके ऑपरेटिंग सिस्टम के साथ संचार करता है, निम्न स्तर के कार्यों या यहां तक ​​कि कोडांतरक निर्देशों को कॉल करता है) जो वास्तव में फ़ाइल खोलते हैं। और यह है, जो .NET के बारे में पता नहीं है, अप्रबंधित है। लेकिन आप शायद असेंबलर निर्देशों का उपयोग करके अपने आप फ़ाइल को खोल सकते हैं और .NET फ़ाइल फ़ंक्शन को बायपास कर सकते हैं। फिर हैंडल और ओपन फ़ाइल अप्रबंधित संसाधन हैं।

DB के साथ भी ऐसा ही है: यदि आप कुछ DB असेंबली का उपयोग करते हैं, तो आपके पास DbConnection इत्यादि जैसी कक्षाएं हैं, उन्हें .NET और प्रबंधित के लिए जाना जाता है। लेकिन वे "गंदे काम" को लपेटते हैं, जो अप्रबंधित है (सर्वर पर मेमोरी आवंटित करें, इसके साथ कनेक्शन स्थापित करें, ...)। यदि आप इस रैपर क्लास का उपयोग नहीं करते हैं और अपने आप से कुछ नेटवर्क सॉकेट खोलते हैं और कुछ आदेशों का उपयोग करके अपने स्वयं के अजीब डेटाबेस के साथ संवाद करते हैं, तो यह अप्रबंधित है।

इन आवरण वर्गों (फ़ाइल, DbConnection आदि) को प्रबंधित किया जाता है, लेकिन वे आपके जैसे ही अप्रबंधित संसाधनों का उपयोग करते हैं, यदि आप रैपर का उपयोग नहीं करते हैं और अपने आप से "गंदा काम" करते हैं। और इसलिए ये रैपर डिस्पोज / फाइनल पैटर्न लागू करते हैं। यह उनकी जिम्मेदारी है कि प्रोग्रामर को अप्रबंधित संसाधनों को जारी करने की अनुमति दें जब रैपर की जरूरत न हो, और जब रैपर कचरा एकत्र हो जाए तो उन्हें रिहा कर दें। रैपर कूड़ा इकट्ठा करने वाले द्वारा सही तरीके से एकत्र किया जाएगा, लेकिन डिस्पोजल / फाइनल पैटर्न का उपयोग करके अंदर के अप्रबंधित संसाधनों को एकत्र किया जाएगा।

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

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


1
अतिरिक्त स्पष्टता पर अच्छा एकunmanaged vs managed resources
अब वह जिसका नाम नहीं होना चाहिए।

आपके उत्तर के लिए thx किस वर्ग की सिफारिश की जाती है कि हम वास्तव में डिस्पोज़ को कहते हैं?
BKSpurgeon 6

2
यह सरल है। आपके द्वारा उपयोग किए जाने वाले प्रत्येक वर्ग पर, आपको यह सत्यापित करना होगा कि क्या यह आईडीआईसोफ़ेक्टिव इंटरफ़ेस लागू करता है। यदि हाँ, तो यदि आप एक विधि में इस तरह के वर्ग का उपयोग करते हैं (उदाहरण के लिए: फ़ाइल खोलना, पाठ संग्रहीत करना, फ़ाइल बंद करना), तो आप उस का उपयोग करके () {} पैटर्न का उपयोग कर सकते हैं, जो आपको स्वचालित रूप से डिस्पोज़ करता है। यदि आप ऐसी कक्षा का उपयोग अधिक विधियों में करते हैं (उदाहरण के लिए: आपकी कक्षा में फ़ाइल होती है, तो कंस्ट्रक्टर में यह फ़ाइल खोलती है, फिर कई विधियाँ कुछ लॉग जोड़ देती हैं ...), तो आपको अपनी कक्षा द्वारा आईडीसोफ़रेबल इंटरफ़ेस लागू करना होगा, डिस्पोज़ / फाइनल पैटर्न को लागू करना होगा। और उस वर्ग की वस्तु का उचित निपटान करें।
मार्स

1
"... कुछ अंतर्निहित .NET वर्ग System.IO.File, FileStream या कुछ और। क्योंकि यह एक सामान्य .NET वर्ग है, इसलिए इसे प्रबंधित किया जाता है।" सम्मान के साथ, यह गलत और भ्रामक है। उनका प्रबंधन नहीं है । यदि उन्हें प्रबंधित किया गया था, तो आप इन वर्गों को आवंटित कर सकते हैं और कचरा कलेक्टर से एक निर्धारक फैशन में सभी संसाधनों के निपटान को पूरी तरह से संभालने की उम्मीद कर सकते हैं। हालाँकि, इससे फ़ाइल हैंडल और अप्रबंधित संसाधन बंद हो जाएंगे और आवश्यकता से अधिक समय तक बंद रहेंगे, क्योंकि कचरा संग्रहकर्ता वर्ग को नहीं करेगा, और संभावित रूप से बहुत लंबे समय तक इसे अंतिम रूप नहीं देगा।
आरोनॉल्स

1
@AaronLS ने अपनी टिप्पणी में आपने "FileStream" के बारे में बात करते हुए इसे अप्रबंधित के रूप में संदर्भित किया है, लेकिन इसके नहीं, हालांकि आंतरिक रूप से यह अपनी नौकरी करने के लिए अप्रबंधित संसाधनों का उपयोग करता है। प्रबंधित दुनिया में, Microsoft ने कार्यान्वयन से आपके द्वारा बहुत सारे अप्रबंधित सामान छिपाए हैं डिस्पोजल पैटर्न। प्रबंधित कोड का मतलब यह नहीं है कि यह अप्रबंधित संसाधनों का उपयोग नहीं करता है। हालाँकि, Microsoft ने उन प्रकार की वस्तुओं पर IDisposable को लागू करने का अच्छा काम किया है। यह इस तथ्य से स्पष्ट होता है कि यह आईडीआईसोपेरिकल लागू करता है। उस प्रमाण के संबंध में हमें इसे एक प्रबंधित वस्तु समझना चाहिए।
मलिक खलील

12

अप्रबंधित संसाधन वे हैं जो .NET रनटाइम (CLR) (उर्फ गैर- .NET कोड।) के बाहर चलते हैं, उदाहरण के लिए, Win32 API में DLL के लिए कॉल, या C ++ में लिखित .dll के लिए कॉल।


6

एक "अप्रबंधित संसाधन" एक चीज नहीं है, बल्कि एक जिम्मेदारी है। यदि कोई ऑब्जेक्ट एक अप्रबंधित संसाधन का मालिक है, तो इसका मतलब है कि (1) इसके बाहर कुछ इकाई को इस तरह से हेरफेर किया गया है, जो सफाई नहीं होने पर समस्या पैदा कर सकता है, और (2) ऑब्जेक्ट में ऐसी सफाई करने के लिए आवश्यक जानकारी है और जिम्मेदार है करने के लिए।

यद्यपि कई प्रकार के अप्रबंधित संसाधन विभिन्न प्रकार के ऑपरेटिंग-सिस्टम संस्थाओं (फाइल, जीडीआई हैंडल, आवंटित मेमोरी ब्लॉक आदि) के साथ बहुत दृढ़ता से जुड़े हुए हैं, एक भी प्रकार की इकाई नहीं है जो उन सभी द्वारा साझा की गई जिम्मेदारी के अलावा अन्य है। साफ - सफाई। आमतौर पर, यदि किसी वस्तु की या तो सफाई करने की ज़िम्मेदारी है, तो उसके पास एक निपटान पद्धति होगी जो उसे सभी क्लीनअप के लिए निर्देश देती है जिसके लिए वह ज़िम्मेदार है।

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

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


5

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

यहां से चोरी हुई , पूरी पोस्ट पढ़ने के लिए स्वतंत्र महसूस करें।


2

कोई भी संसाधन जिसके लिए .NET प्रबंधित हीप में मेमोरी आवंटित की गई है वह एक प्रबंधित संसाधन है। सीएलआर इस तरह की स्मृति से पूरी तरह अवगत हैं और यह सुनिश्चित करने के लिए सब कुछ करेंगे कि यह अनाथ नहीं है। और कुछ भी अप्रबंधित नहीं है। उदाहरण के लिए, COM के साथ इंटरॉपिंग करने से, प्रॉक्स मेमोरी स्पेस में ऑब्जेक्ट्स बन सकते हैं, लेकिन CLR इसका ध्यान नहीं रखेगा। इस मामले में प्रबंधित वस्तु जो कि प्रबंधित बाउंड्री के पार कॉल करती है, उसे इससे आगे की किसी भी चीज की जिम्मेदारी होनी चाहिए।


0

आइए पहले समझते हैं कि VB6 या C ++ प्रोग्राम (नॉन डॉटनेट एप्लिकेशन) कैसे निष्पादित करते थे। हम जानते हैं कि कंप्यूटर केवल मशीन स्तर कोड को समझते हैं। मशीन स्तर कोड को देशी या बाइनरी कोड भी कहा जाता है। इसलिए, जब हम VB6 या C ++ प्रोग्राम निष्पादित करते हैं, तो संबंधित भाषा संकलक, संबंधित भाषा स्रोत कोड को मूल कोड में संकलित करता है, जिसे तब अंतर्निहित ऑपरेटिंग सिस्टम और हार्डवेयर द्वारा समझा जा सकता है।

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

आइए अब समझते हैं, कि .Net प्रोग्राम कैसे निष्पादित होता है। डॉटनेट का उपयोग करके हम विभिन्न प्रकार के एप्लिकेशन बना सकते हैं। कुछ सामान्य प्रकार के .NET अनुप्रयोगों में वेब, विंडोज, कंसोल और मोबाइल एप्लिकेशन शामिल हैं। आवेदन के प्रकार के बावजूद, जब आप किसी भी .NET अनुप्रयोग को निष्पादित करते हैं, तो निम्न होता है

  1. .NET एप्लिकेशन इंटरमीडिएट भाषा (IL) में संकलित हो जाता है। IL को आम मध्यवर्ती भाषा (CIL) और Microsoft मध्यवर्ती भाषा (MSIL) के रूप में भी जाना जाता है। .NET और non .NET एप्लिकेशन दोनों एक असेंबली उत्पन्न करते हैं। असेंबलियों में .DLL या .EXE का एक्सटेंशन होता है। उदाहरण के लिए यदि आप एक विंडोज़ या कंसोल एप्लिकेशन को संकलित करते हैं, तो आपको एक .EXE मिलता है, जैसे कि जब हम एक वेब या क्लास लाइब्रेरी प्रोजेक्ट संकलित करते हैं तो हमें एक .DLL मिलता है। .NET और NON .NET असेंबली के बीच अंतर यह है कि, DOTNET असेंबली इंटरमीडिएट भाषा प्रारूप में है, जहाँ NON DOTNET असेंबली मूल कोड स्वरूप में है।

  2. NON DOTNET एप्लिकेशन सीधे ऑपरेटिंग सिस्टम के शीर्ष पर चल सकते हैं, जहाँ DOTNET एप्लीकेशन एक वर्चुअल वातावरण के शीर्ष पर चलते हैं जिसे कॉमन लैंग्वेज रनटाइम (CLR) कहा जाता है। सीएलआर में जस्ट इन-टाइम कंपाइलर (जेआईटी) नामक एक घटक होता है, जो इंटरमीडिएट भाषा को देशी कोड में परिवर्तित कर देगा जिसे अंतर्निहित ऑपरेटिंग सिस्टम समझ सकता है।

इसलिए, .NET में एप्लिकेशन के निष्पादन में 2 चरण होते हैं। 1. भाषा संकलक, इंटरमीडिएट भाषा में स्रोत कोड को संकलित करता है (IL) 2. सीएलआर में JIT संकलक, IL को मूल कोड में परिवर्तित करता है, जिसे फिर अंतर्निहित ऑपरेटिंग सिस्टम पर चलाया जा सकता है ।

चूंकि, .NET असेंबली इंटरमेडाइट लैंग्वेज फॉर्मेट में होती है, न कि नेटिव कोड। .NET असेंबली किसी भी प्लेटफॉर्म पर पोर्टेबल होती है, जब तक कि टारगेट प्लेटफॉर्म में कॉमन लैंग्वेज रनटाइम (CLR) होता है। लक्ष्य प्लेटफ़ॉर्म का सीएलआर इंटरमेडिट भाषा को देशी कोड में परिवर्तित करता है जिसे अंतर्निहित ऑपरेटिंग सिस्टम समझ सकता है। इंटरमीडिएट लिंगेज को प्रबंधित कोड भी कहा जाता है। ऐसा इसलिए है क्योंकि सीएलआर उस कोड का प्रबंधन करता है जो इसके अंदर चलता है। उदाहरण के लिए, VB6 प्रोग्राम में, डेवलपर किसी ऑब्जेक्ट द्वारा खपत की गई मेमोरी को डी-आवंटित करने के लिए जिम्मेदार होता है। यदि कोई प्रोग्रामर मेमोरी को डी-आबंटित करना भूल जाता है, तो हम मेमोरी अपवादों से बाहर निकलने में मुश्किल में पड़ सकते हैं। दूसरी ओर एक .NET प्रोग्रामर को किसी ऑब्जेक्ट द्वारा उपभोग की गई मेमोरी को डी-आवंटित करने के बारे में चिंता करने की आवश्यकता नहीं है। स्वचालित मेमोरी प्रबंधन, जिसे हड़पने के संग्रह के रूप में भी जाना जाता है, सीएलआर द्वारा प्रदान किया जाता है। इसके अलावा, कचरा संग्रहण से, CLR द्वारा प्रदान किए गए कई अन्य लाभ हैं, जिनके बारे में हम बाद के सत्र में चर्चा करेंगे। चूंकि, सीएलआर इंटरमीडिएट भाषा का प्रबंधन और निष्पादन कर रहा है, इसलिए इसे (IL) को प्रबंधित कोड भी कहा जाता है।

.NET विभिन्न प्रोग्रामिंग भाषाओं जैसे C #, VB, J #, और C ++ का समर्थन करता है। C #, VB और J # केवल प्रबंधित कोड (IL) उत्पन्न कर सकते हैं, जहां C ++ प्रबंधित कोड (IL) और संयुक्त राष्ट्र प्रबंधित कोड (Native code) दोनों उत्पन्न कर सकता है।

मूल कोड को स्थायी रूप से कहीं भी संग्रहीत नहीं किया जाता है, हम प्रोग्राम को बंद करने के बाद मूल कोड को फेंक दिया जाता है। जब हम प्रोग्राम को फिर से निष्पादित करते हैं, तो मूल कोड फिर से उत्पन्न हो जाता है।

.NET प्रोग्राम जावा प्रोग्राम एक्जीक्यूशन के समान है। जावा में हमारे पास बाइट कोड और जेवीएम (जावा वर्चुअल मशीन) हैं, जहां .NET के रूप में हम इंटरमीडिएट भाषा और सीएलआर (सामान्य भाषा रनटाइम)

यह इस लिंक से प्रदान किया गया है - वह एक महान शिक्षक है। http://csharp-video-tutorials.blogspot.in/2012/07/net-program-execution-part-1.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.