2012-02-07 18 views
23

मेरी समझ यह है कि एक .NET अनुप्रयोग प्लेटफार्म स्वतंत्र है, इसलिए शुद्ध .NET कोड या तो x86 या 64-बिट मशीन पर चलाना चाहिए। जब तक आपका .NET कोड कुछ मूल कोड नहीं कॉल करता है, तो यह प्लेटफार्म निर्भर है। क्या यह सच है?क्या 32-बिट .NET अनुप्रयोग और 64-बिट .NET अनुप्रयोग के बीच कोई अंतर है?

+0

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

उत्तर

17

.NET अनुप्रयोगों को x86, x64, या "दोनों" लक्ष्यीकरण के रूप में संकलित किया जा सकता है। आम तौर पर, यदि आप एक COM नियंत्रण पर भरोसा करते हैं जो अन्य प्लेटफॉर्म के लिए उपलब्ध नहीं है, तो आप केवल एक मंच को लक्षित करेंगे।

3

हां, आप जो कहते हैं वह सत्य है। शुद्ध .NET कोड प्लेटफार्म स्वतंत्र है (विजुअल स्टूडियो में "कोई भी CPU") जब तक बाहरी पुस्तकालय (COM और P/Invokes जहां तक ​​मुझे पता है) का उपयोग किया जाता है। फिर आपके प्लेटफ़ॉर्म को बाहरी पुस्तकालयों के निर्माण के लिए उपयोग किए जाने वाले किसी से मेल खाना चाहिए।

9

आपका कोड पूरी तरह से प्लेटफार्म स्वतंत्र होने के लिए संकलित किया जा सकता है, या आप एक विशिष्ट मंच को लक्षित कर सकते हैं। मानक सिफारिश पुस्तकालयों आर्किटेक्चर-तटस्थ (यानी, "कोई भी CPU") छोड़ने और निष्पादन योग्य के लिए x86 को लक्षित करना है। AnyCPU executables are usually more trouble than they're worth: वजहों विजुअल स्टूडियो 2010 डिफ़ॉल्ट रूप से इस दृष्टिकोण का उपयोग करता यहां समझाए गए हैं

  1. दो बहुत ही अलग प्रकार (64 और 86) में चल रहा है उत्पाद जटिलता और परीक्षण की लागत बढ़ जाती है।
  2. 32-बिट वैसे भी तेज (थोड़ा) होता है।
  3. कुछ विशेषताएं x64 में उपलब्ध नहीं हैं।
  4. यदि 4 से अधिक   जीबी पता स्थान उपयोगी होगा, तो सही काम करने के लिए को लक्षित करना है x64 और दो प्लेटफ़ॉर्म का समर्थन करने की लागत से बचें।
बेशक

, अगर आप सिर्फ 86 फिर अपने कोड अभी भी WoW64 के माध्यम से 64 पर चलाना शामिल है लक्ष्य।

+0

मैं निष्पादन योग्य के लिए डिफ़ॉल्ट व्यवहार के लिए बहुत उलझन में हूं। x86 को लक्षित करें? –

+0

हां, एक्जिक्यूटिव्स x86 को लक्षित करते हैं। वीएस -2010 में एक नया समाधान बनाएं, फिर एक कंसोल एप्लिकेशन, एक विंडोज फॉर्म एप्लिकेशन, एक डब्ल्यूपीएफ एप्लीकेशन और एक क्लास लाइब्रेरी जोड़ें। यदि आप कॉन्फ़िगरेशन प्रबंधक को देखते हैं (समाधान पर राइट क्लिक करें, यह संदर्भ मेनू में है), तो आप देखेंगे कि एप्लिकेशन x86 के लिए कॉन्फ़िगर किए गए हैं, जबकि क्लास लाइब्रेरी AnyCPU के लिए सेट है। यह विशेष रूप से परेशान हो सकता है यदि आप गलती से कोई भी एसीसीपीयू बिल्ड बनाते हैं (जैसा कि मैंने कुछ महीने पहले किया था) - आपके निष्पादन योग्य नहीं बनाए जाएंगे, क्योंकि उनके पास डिफ़ॉल्ट रूप से AnyCPU के लिए वैध कॉन्फ़िगरेशन नहीं है। –

+0

x86 का अर्थ है कि यह सख्ती से 32 बिट संकलित करता है, x64 का मतलब है कि यह सख्ती से 64 बिट संकलित करता है और एएनसीपीयू का मतलब है कि यह 32 बिट ओएस पर 64 बिट और 64 बिट ओएस पर 64 बिट संकलित करता है। यदि आप COM/PInvoke पर कोई कॉल करते हैं, तो आपको सही आर्क को लक्षित करने की आवश्यकता है क्योंकि COM/PInvoke संदर्भों के बजाय पॉइंटर्स का उपयोग करते हैं। मैं थोड़ी दूर हो सकता था, लेकिन यह सामान्य विचार है। अनुलेख 64 बिट को अतिरिक्त सीपीयू रजिस्टरों तक पहुंच मिलती है, इसलिए कोड तेज हो सकता है और सभी 64 बिट इन्ट्स की गणना 1 चक्र में की जा सकती है। तो कोई भी Int64 चर तेजी से चला जाएगा। – Bengie

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