2010-02-02 7 views
7

Visual Studio > Build > Configuration Manager में आप लक्ष्य मंच चुन सकते हैं।.NET अनुप्रयोगों को 64-बिट पर अनुकूलित करने के लिए कैसे करें?

यह क्या बदलता है?

क्या कोई अन्य तरीका है कि मैं x64 प्लेटफ़ॉर्म को लक्षित करते समय अपने .NET ऐप को अनुकूलित कर सकता हूं?

उत्तर

5

जैसा कि पहले से ही उल्लेख किया गया है, .NET असेंबली में आईएल प्लेटफ़ॉर्म स्वतंत्र है (यही कोई भी CPU सेटिंग का तात्पर्य है)। .NET रनटाइम का जेआईटी (बस-इन-टाइम) कंपाइलर इस मंच को स्वतंत्र बाइट कोड को प्लेटफॉर्म विशिष्ट देशी कोड में उस प्लेटफ़ॉर्म के लिए अनुकूलन के साथ संकलित करेगा। तो आमतौर पर आपको कुछ भी चिंता करने की ज़रूरत नहीं है।

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

जैसा कि रोवलैंड ने एक टिप्पणी में जोड़ा, प्लेटफ़ॉर्म लक्ष्य को अंतर्निहित ऑपरेटिंग सिस्टम के प्रत्यक्षदर्शी से भ्रमित नहीं किया जाना चाहिए। प्लेटफार्म लक्ष्य के रूप में x86 के साथ .NET असेंबली विंडोज के 32-बिट और 64-बिट संस्करणों पर चलेंगे (यानी WOW64 मोड में 32-बिट प्रक्रिया के रूप में)।

वास्तव में, प्लेटफ़ॉर्म लक्ष्य सेटिंग का उपयोग करने के लिए शायद सबसे आम परिदृश्य तब होता है जब आपकी .NET असेंबली में 32-बिट COM घटक का संदर्भ होता है। एक x64 सिस्टम पर असेंबली निष्पादित करने में सक्षम होने के लिए, असेंबली को x86 ध्वज के साथ संकलित किया जाना चाहिए। 64-बिट ओएस पर और के साथ कोई भी CPU सेटिंग सक्षम है, रनटाइम 64-बिट प्रक्रिया में असेंबली निष्पादित करेगा और 64-बिट प्रक्रिया में 32-बिट COM घटक लोड करना विफल हो जाएगा। X86 ध्वज के साथ संकलन 32-बिट प्रक्रिया में असेंबली निष्पादित करने के लिए .NET रनटाइम का कारण बनता है और इस प्रकार COM घटक सुरक्षित रूप से लोड किया जा सकता है।

+2

x86 .NET ऐप्स x64 पर चलेंगे, लेकिन इसके विपरीत नहीं। –

1

आपका सी #/वीबी.Net आदि मंच के लिए सही आईएल में संकलित किया गया है, चाहे यह x86, x64 या जो भी हो। किसी भी मार्ग को कोड निर्देशित करने के लिए भाषा में कोई अलग संरचना नहीं है, इसलिए उत्तर नहीं है।

2

यह 64-बिट प्लेटफ़ॉर्म के लिए आपके ऐप को "अनुकूलित" नहीं करता है। .NET असेंबली में आईएल होगा जो उस सेटिंग के बावजूद परिभाषा द्वारा मंच-स्वतंत्र है। यह सेटिंग केवल लक्षित असेंबली में ध्वज फ़्लिप करती है और इसे रनटाइम के विशिष्ट संस्करण पर चलाती है।

+0

@Mehrdad और यदि मैं इस ध्वज को सेट नहीं करता, तो यह रनटाइम के गलत संस्करण पर चलाएगा? और यह कुछ प्रदर्शन खो देगा? –

+2

@ जेडर: कोई भी सीसीयू 64 बिट ओएस पर 64 बिट रनटाइम और 32 बिट ओएस पर 32 बिट रनटाइम लोड करेगा (या जो भी प्रक्रिया में लोड हो रहा है, तो मूल प्रक्रिया चल रही है)। x86 इसे 64 बिट ओएस (WOW64 मोड में) में 32 बिट सीएलआर में चलाने के लिए मजबूर करेगा। अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/zekwfyz4(VS.80).aspx देखें। –

+0

आईएल कोड 64 बिट के लिए अनुकूलित नहीं है, लेकिन x64 में रजिस्टरों की अधिक संख्या के कारण, मूल कोड जो कि जेआईटी कंपाइलर उत्पन्न करता है वह संभावित रूप से तेज़ है। दो जेआईटी कंपाइलर्स (x86 और x64) उनकी कोड जनरेशन क्षमताओं के संदर्भ में काफी अलग हैं।आईएल कोड से मूल कोड पीढ़ी के विषय पर एक दिलचस्प एमएसडीएन ब्लॉग है: http://blogs.msdn.com/clrcodegeneration/default.aspx – Pepor

0

.NET अनुप्रयोग के लिए डिफ़ॉल्ट सेटअप कोई भी CPU है जिसका अर्थ है कि असेंबली 32 और 64 बिट प्लेटफ़ॉर्म दोनों पर चलेंगी। हालांकि आप 32 या 64 बिट रनटाइम की आवश्यकता के लिए 32 बिट या 64 बिट निर्दिष्ट कर सकते हैं।

याद रखें कि विधानसभा में आईएल कोड जेआईटी संकलित होता है जब आवेदन निष्पादित होता है। तो कोई भी सीपीयू असेंबली 32 और 64 बिट दोनों पर आगे के बिना चलाएगा।

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