2014-04-07 6 views
28

शीर्षक यह सब कहता है। मैं उम्मीद कर रहा था कि कोई मुझे बता सकता है कि .NET मूल तालिका में लाता है जो हमारे पास पहले से ही Ngen.exe के साथ नहीं था।.NET मूल और Ngen.exe के बीच क्या अंतर है?

+0

क्या आपने घोषणा ब्लॉग पोस्ट http://blogs.msdn.com/b/dotnet/archive/2014/04/02/announcing-net-native-preview.aspx पढ़ा था? यह मेरे लिए समझ में आया। –

+0

@ राडूपास्कल हां मैंने किया लेकिन यह दोनों के बीच के अंतर के बारे में मेरे प्रश्न का उत्तर नहीं देता है। यदि आप इसे मुझे समझा सकते हैं तो कृपया एक उत्तर दें और मैं ऊपर उठाऊंगा :)। –

उत्तर

17

जहां तक ​​मुझे पता है कि नजन अभी भी ढांचे पर निर्भर करता है, जो .NET मूल नहीं है जब यह उत्पादन के अनुसार उत्पादन को दबाता है।

सिर्फ प्रदर्शन के बारे में इस है, या यह भी सी # कोड (माना) के निर्माण के लिए अनुमति नहीं है कि मूल रूप से Win32/64 के लिए संकलित और लक्ष्य पर .NET फ्रेमवर्क के एक स्थापित आवश्यकता नहीं होती मशीन?

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

Microsoft .NET Native FAQ

+1

लक्ष्य पर .NET Framework की आवश्यकता के बिना .NET कोड को मूल रूप से चलाने के लिए, क्या इसका मतलब यह है कि मेरा क्या मतलब है: फ्रेमवर्क मूल कोड में संकलित किया गया है और ऐप के साथ विलय किया गया है? अन्यथा ऐप को जीसी सेवा कैसे मिलती है? धन्यवाद, –

+0

क्रमबद्ध करें, हां। जब आप संकलित करते हैं, तो आपको 3 फाइलें मिलेंगी। 'appName.exe' (*' appName.dll' * पर एक एंट्री पॉइंट *), 'appName.dll' (* में आपका एप्लिकेशन, साथ ही साथ .NET क्लास लाइब्रेरी का कोड भी शामिल है, जो आपके पास हो सकता है कि कोई अन्य तृतीय पक्ष निर्भरता हो, और कुछ समर्थन कोड *)। अंतिम फ़ाइल 'mrt100_app.dll' एक रिफैक्टर रनटाइम है जो जीसी जैसे रनटाइम सेवाएं प्रदान करती है। – scheien

+1

उल्लेख करना भूल गया कि यह केवल उन ब्लॉक को लेता है जिन्हें आपने वास्तव में .NET क्लास लाइब्रेरी से उपयोग किया है। जैसे अगर आपका प्रोजेक्ट केवल 'System.IO' से कुछ उपयोग करता है, तो यह' System.Web' में नहीं खींच पाएगा। – scheien

27

आप NGen प्रौद्योगिकी है कि डेस्कटॉप CLR का उपयोग करता है के विकास के रूप में नेट मूल निवासी के बारे में सोच सकते हैं।

  • क्रम निर्भरता - -, .नेट मूल निवासी एक रिफैक्टर्ड क्रम (mrt100_app.dll) जो आवेदन स्थानीय है का उपयोग करता है NGEN पूर्ण डेस्कटॉप CLR का उपयोग करता है वहाँ कुछ प्रमुख तरीके कि नेट मूल निवासी और NGEN अलग है। .NET मूल रनटाइम को एप्लिकेशन से अधिक कार्यक्षमता और कोड जनरेशन टूल श्रृंखला में स्थानांतरित करने के लिए दोबारा प्रतिक्रिया दी गई है। यह रनटाइम पर इसे बहुत छोटा, अधिक भुगतान करने के लिए और (उम्मीद है) अधिक डिबगबल बनाता है। एक .NET मूल अनुप्रयोग भी स्वयं निहित है, जो एक आवेदन के लिए उपयोगी संपत्ति है।
  • मूल छवि निर्भरता - एक एनजीईएन छवि सीएलआर दोनों के लिए कड़ाई से बंधी है जो इसके खिलाफ चलती है और इसकी निर्भर असेंबली की एनजीईएन छवि है। उदाहरण के लिए, mscorlib.dll पर बग फिक्स किए जाने पर लगभग सभी एनजीईएन छवियों को पुनर्जीवित करने की आवश्यकता होती है।
  • संकलन स्थान - .NET मूल के लिए उद्देश्य ऐप स्टोर में देशी कोड उत्पन्न होना है। एनजीईएन अंतिम उपयोगकर्ता डिवाइस पर देशी कोड उत्पन्न करता है। आप निश्चित रूप से कल्पना कर सकते हैं कि कुछ वर्गों के उपकरणों (यानी फोन, टैबलेट) के लिए आप अंततः उपयोगकर्ता बैटरी जीवन उत्पन्न कोड को बर्बाद नहीं करेंगे। स्टोर में संकलन भी .NET मूल को संकलित करने में अधिक समय बिताने की अनुमति देता है, इसलिए एनजीएनएन की तुलना में इसे अधिक अनुकूलन लागू करने की अनुमति देता है।
  • कोड जनरेटर - NGEN JIT कम्पाइलर का उपयोग करता कोड उत्पन्न करने के लिए, .नेट मूल निवासी विज़ुअल सी ++ संकलक के वापस अंत है, जो JIT मामले
  • में लागू करने के लिए है कि बहुत महंगे हैं ऐसे ऑटो vectorization के रूप में अनुकूलन लागू करने के लिए सक्षम बनाता का उपयोग करता है
  • पूरे कार्यक्रम विश्लेषण - एनजीएन एक समय में एक ही असेंबली के लिए कोड उत्पन्न करता है, जो कई अनुप्रयोग संदर्भों में एक एनजीईएन छवि का उपयोग करने की अनुमति देता है। ।नेट नेटिव एक संपूर्ण एप्लिकेशन पैकेज के लिए कोड जेनरेट करता है, जो इसे ऑप्टिमाइज़ेशन का एक विस्तृत सेट लागू करने की अनुमति देता है (उदाहरण के लिए, पूरी तरह से कोड को फेंकना जो कि रनटाइम पर कभी भी उपयोग नहीं किया जाता है)। यह एक रिफैक्टर फ्रेमवर्क के साथ मिलकर है जो इन अनुकूलन को जितना संभव हो सके लात मारने में सक्षम बनाता है।
  • आईएल फ़ॉलबैक - एनजीईएन छवियों में एक असेंबली (अन्य डेटा संरचनाओं के बीच) दोनों देशी कोड और एमएसआईएल होते हैं। अगर रनटाइम पर कुछ होता है जो सीएलआर को देशी कोड की आवश्यकता होती है जो इसे एनजीएनई छवि में नहीं मिल पाती है, तो यह वापस जेआईटीआईंग पर आ सकती है। .NET मूल के वर्तमान डेवलपर पूर्वावलोकन में, मूल छवि में केवल मूल कोड मौजूद है। इसका अर्थ यह है कि यदि कोड छवि में मौजूद नहीं है, तो यह रनटाइम पर कभी निष्पादित नहीं होगा।
+1

लक्ष्य पर .NET Framework की आवश्यकता के बिना .NET कोड को मूल रूप से चलाने के लिए, क्या इसका मतलब यह है कि इसका अर्थ यह है कि: फ्रेमवर्क मूल कोड में संकलित किया गया है और ऐप के साथ विलय किया गया है? अन्यथा ऐप को जीसी सेवा कैसे मिलती है? धन्यवाद, –

+1

@ थॉमस न्यूगुएन: हाँ, माइक्रोसॉफ्ट [कहते हैं] (https://msdn.microsoft.com/en-US/vstudio/dn642499.aspx) "हां, फ्रेमवर्क कोड को एप्लिकेशन में संकलित किया जाएगा।" – Mehrdad

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