मैं अपने C # कोड में एक विशिष्ट कमांड का उपयोग कर रहा हूं, जो अच्छी तरह से काम करता है। हालांकि, यह "अप्रबंधित" कोड में दुर्व्यवहार करने के लिए कहा जाता है।
प्रबंधित या अप्रबंधित कोड क्या है?
मैं अपने C # कोड में एक विशिष्ट कमांड का उपयोग कर रहा हूं, जो अच्छी तरह से काम करता है। हालांकि, यह "अप्रबंधित" कोड में दुर्व्यवहार करने के लिए कहा जाता है।
प्रबंधित या अप्रबंधित कोड क्या है?
जवाबों:
अनवांटेड कोड के बारे में MSDN के कुछ पाठ यहां दिए गए हैं ।
कुछ पुस्तकालय कोड को अप्रबंधित कोड (उदाहरण के लिए, मूल कोड API जैसे Win32) में कॉल करने की आवश्यकता होती है। क्योंकि इसका मतलब प्रबंधित कोड के लिए सुरक्षा परिधि से बाहर जाना है, क्योंकि सावधानी बरतने की आवश्यकता है।
प्रबंधित कोड के बारे में कुछ अन्य मानार्थ अन्वेषण यहां दिए गए हैं:
आपकी समस्या के लिए:
मुझे लगता है कि यह इसलिए है क्योंकि NUnit UnitTesting के लिए आपके कोड को निष्पादित करता है और इसका कुछ हिस्सा अप्रबंधित हो सकता है। लेकिन मैं इसके बारे में निश्चित नहीं हूं, इसलिए इसे सोने के लिए न लें। मुझे यकीन है कि कोई व्यक्ति आपको इसके बारे में अधिक जानकारी देने में सक्षम होगा। आशा करता हूँ की ये काम करेगा!
यह विषय के बारे में एक अच्छा लेख है।
संक्षेप में,
एक एप्लिकेशन प्रोग्राम जिसे एक रनटाइम इंजन के भीतर एक ही मशीन में इंस्टॉल किया जाता है। एप्लिकेशन इसके बिना नहीं चल सकता। रनटाइम वातावरण सॉफ्टवेयर रूटीन की सामान्य लाइब्रेरी प्रदान करता है जो प्रोग्राम का उपयोग करता है और आमतौर पर मेमोरी प्रबंधन करता है। यह स्रोत कोड से निष्पादन योग्य कोड या मध्यवर्ती भाषा से निष्पादन योग्य कोड तक जस्ट-इन-टाइम (JIT) रूपांतरण भी प्रदान कर सकता है। जावा, विजुअल बेसिक और .NET का सामान्य भाषा रनटाइम (सीएलआर) रनटाइम इंजन के उदाहरण हैं। (और पढ़ें )
एक निष्पादन योग्य कार्यक्रम जो अपने आप चलता है। ऑपरेटिंग सिस्टम से लॉन्च किया गया, प्रोग्राम कॉल करता है और ऑपरेटिंग सिस्टम में सॉफ़्टवेयर रूट का उपयोग करता है, लेकिन इसके लिए किसी अन्य सॉफ़्टवेयर सिस्टम का उपयोग करने की आवश्यकता नहीं होती है। असेंबली लैंग्वेज प्रोग्राम जिन्हें मशीन लैंग्वेज और C / C ++ प्रोग्राम में असेंबल किया गया है, एक विशेष प्लेटफॉर्म के लिए मशीन लैंग्वेज में संकलित किए गए हैं, जो अप्रबंधित कोड के उदाहरण हैं। (और पढ़ें )
जब आप मानवरहित के बारे में सोचते हैं , तो मशीन-विशिष्ट, मशीन-स्तरीय कोड सोचें। X86 विधानसभा भाषा की तरह। अप्रबंधित (मूल) कोड संकलित किया गया है और इसे सीधे उस प्रोसेसर पर चलाने के लिए जोड़ा गया है, जिसे इस समय के लिए सभी OS सामग्री को छोड़कर बनाया गया था। यह पोर्टेबल नहीं है, लेकिन यह तेज है। बहुत सरल, कोड नीचे छीन लिया।
प्रबंधित कोड जावा से पुरानी व्याख्यात्मक बुनियादी, या कुछ भी है जो .NET के तहत चलता है। प्रबंधित कोड आमतौर पर एक मध्यवर्ती स्तर पी-कोड या निर्देशों के बाइट कोड सेट के लिए संकलित किया जाता है। ये मशीन-विशिष्ट निर्देश नहीं हैं, हालांकि वे असेंबली भाषा के समान दिखते हैं। प्रबंधित कोड उस मशीन से प्रोग्राम को इंसुलेट करता है जिस पर वह चल रहा है, और एक सुरक्षित सीमा बनाता है जिसमें सभी मेमोरी को परोक्ष रूप से आवंटित किया जाता है, और आम तौर पर बोलते हुए, आपके पास पोर्ट, मेमोरी एड्रेस स्पेस, स्टैक आदि जैसे मशीन संसाधनों तक सीधी पहुंच नहीं होती है। । विचार अधिक सुरक्षित वातावरण में चलाना है।
प्रबंधित चर से परिवर्तित करने के लिए, मानवरहित व्यक्ति से कहें, आपको वास्तविक वस्तु को स्वयं प्राप्त करना होगा। यह शायद कुछ अतिरिक्त पैकेजिंग में लिपटा या बॉक्सिंग है। अनवांटेड वैरिएबल (जैसे 'इंट', कहते हैं) - 32 बिट मशीन पर - बिल्कुल 4 बाइट्स लेता है। कोई ओवरहेड या अतिरिक्त पैकेजिंग नहीं है। प्रबंधित अप्रबंधित कोड से जाने की प्रक्रिया - और फिर से - " मार्शलिंग " कहा जाता है । यह आपके कार्यक्रमों को सीमा पार करने की अनुमति देता है।
यथासंभव कम शब्दों में:
प्रबंधित कोड वह है जो C # .Net, VB.Net, F # .Net आदि संकलक बनाते हैं। यह सीएलआर पर चलता है, जो अन्य चीजों के अलावा कचरा संग्रह, और संदर्भ जाँच, और बहुत कुछ जैसी सेवाएं प्रदान करता है। तो इसे ऐसा समझें, मेरा कोड CLR द्वारा प्रबंधित है।
दूसरी ओर, अप्रबंधित कोड सीधे मशीन कोड के लिए संकलित होता है। यह सीएलआर द्वारा प्रबंधन नहीं करता है।
प्रबंधित कोड:
वह कोड जो आम भाषा के रनटाइम के साथ "सहयोग के अनुबंध" के तहत चलता है। प्रबंधित कोड को स्मृति प्रबंधन, क्रॉस-भाषा एकीकरण, कोड एक्सेस सुरक्षा और वस्तुओं के स्वचालित जीवनकाल नियंत्रण जैसी सेवाएं प्रदान करने के लिए रनटाइम के लिए आवश्यक मेटाडेटा की आपूर्ति करनी चाहिए। Microsoft मध्यवर्ती भाषा (MSIL) पर आधारित सभी कोड प्रबंधित कोड के रूप में निष्पादित होते हैं।Un-Managed Code:
वह कोड जो सामान्य भाषा के क्रम के सम्मेलनों और आवश्यकताओं की परवाह किए बिना बनाया जाता है। कम से कम सेवाओं (उदाहरण के लिए, कोई कचरा संग्रह, सीमित डिबगिंग, और इतने पर) के साथ आम भाषा रनटाइम वातावरण में अप्रबंधित कोड निष्पादित करता है।
संदर्भ: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx
प्रबंधित कोड CLR यानी .NET रनटाइम के वातावरण के अंदर चलता है। सभी में IL प्रबंधित कोड हैं। लेकिन यदि आप कुछ तृतीय पक्ष सॉफ़्टवेयर उदाहरण VB6 या VC ++ घटक का उपयोग कर रहे हैं, तो वे .NET रनटाइम (CLR) के रूप में अप्रबंधित कोड का नियंत्रण नहीं रखते हैं। भाषा के स्रोत कोड निष्पादन पर।
प्रबंधित कोड: - वह कोड जिसे MSIL (मध्यवर्ती भाषा) का रूप भाषा संकलक संकलन के बाद विकसित किया CLR
जाता है और सीधे प्रबंधित कोड द्वारा निष्पादित किया जाता है। जैसे: - .net फ्रेमवर्क द्वारा समर्थित सभी 61 भाषा कोड
अनवांटेड कोड: - वह कोड जो पहले विकसित .net
किया गया था जिसके लिए MSIL फॉर्म उपलब्ध नहीं है और इसे CLR
सीधे द्वारा निष्पादित किया जाता है बल्कि CLR
ऑपरेटिंग सिस्टम पर रीडायरेक्ट किया जाएगा इसे अनमैन्ड कोड के रूप में जाना जाता है।
जैसे: -COM, Win32 API
सबसे पहले यह समझें, पहले .NET framework
, Microsoft
स्टैंड-अलोन उत्पाद प्रदान कर रहे थे जैसे MFC (Visual C++), VB, FoxPro
आदि।
2002 में, Microsoft ने अपने उत्पादों को संयोजित किया और .NET फ्रेमवर्क बनाया। अब एक अंतर है कि कैसे कोड को पहले निष्पादित किया गया था और कैसे कोड प्रबंधित और .NET फ्रेमवर्क में निष्पादित किया गया है। Microsoft ने CLR
.NET फ्रेमवर्क के साथ अवधारणा पेश की, जो .NET फ्रेमवर्क के किसी भी समर्थित लैनग्यूग से आने वाले कोड को संकलित करता है और memory mangement, garbage collection
आदि जैसे अतिरिक्त कार्यात्मकता प्रदान करता है । लेकिन, ऐसी सीएलआर सुविधाएँ सीधे पहले उपलब्ध नहीं थीं।
इसलिए यदि आप .NET फ्रेमवर्क (CLR के साथ संकलित) में लाइब्रेरी / कोड बना रहे हैं तो उसे कहा जाता है
Managed code
। आप इस लाइब्रेरी को अन्य .NET एप्लिकेशन / प्रोजेक्ट में आगे उपयोग कर सकते हैं, और वहां भी, CLR समझेंगे कि इसे पहले कैसे संकलित किया गया था, और इसीलिए यह आपका प्रबंधन कोड बना हुआ है।
OTOH यदि आप .NET फ्रेमवर्क से पहले लिखे गए पुस्तकालयों का उपयोग करना चाहते हैं तो आप कुछ सीमाओं के साथ कर सकते हैं, लेकिन याद रखें, चूंकि CLR उस समय नहीं था, इसलिए अब, CLR इस कोड को फिर से समझ और संकलित नहीं करेगा। । और यह कहा जाएगा unmanaged code
। कृपया ध्यान दें कि, कुछ सुविधाएँ / उपकरण प्रदान करने के लिए कुछ तृतीय पक्ष द्वारा बनाई गई लाइब्रेरी / असेंबली को भी सीएलआर कॉम्पीटेबली नहीं होने पर अप्रबंधित कोड माना जा सकता है।
आम शब्दों में, प्रबंधन कोड वह चीज है जिसे आपका सीएलआर समझता है और इसे आगे के निष्पादन के लिए स्वयं संकलित कर सकता है। .NET फ्रेमवर्क में, (किसी भी भाषा से। .NET फ्रेमवर्क पर काम होता है) जब कोड सीएलआर में जाता है तो कोड कुछ मेटा डेटा की जानकारी की आपूर्ति करता है, ताकि सीएलआर आपको यहां निर्दिष्ट सुविधाएँ प्रदान कर सके । उनमें से कुछ Garbage collection, Performance improvements, cross-language integration, memory management
आदि हैं ।
OTOH, अनमांग कोड मशीन के लिए कुछ विशिष्ट है और उपयोग के लिए तैयार है, इसे आगे संसाधित करने की आवश्यकता नहीं है।
Pro C # 5 और .NET 4.5 फ्रेमवर्क से:
प्रबंधित बनाम अप्रबंधित कोड: शायद C # भाषा के बारे में समझने के लिए सबसे महत्वपूर्ण बिंदु यह है कि यह कोड का उत्पादन कर सकता है जो केवल .NET रनटाइम के भीतर निष्पादित हो सकता है (आप मूल COM सर्वर या एक अप्रबंधित C / C ++ का निर्माण करने के लिए C # का उपयोग नहीं कर सकते हैं) आवेदन)। आधिकारिक तौर पर बोलते हुए, .NET रनटाइम को लक्षित करने वाले कोड का वर्णन करने के लिए प्रयुक्त शब्द प्रबंधित कोड है। बाइनरी यूनिट जिसमें प्रबंधित कोड होता है, उसे असेंबली कहा जाता है (बस थोड़ी सी में असेंबली पर अधिक विवरण)। इसके विपरीत, .NET रनटाइम द्वारा सीधे होस्ट नहीं किए जा सकने वाले कोड को मानवरहित कोड कहा जाता है।