ठीक है, सिर्फ उस छेद में कुछ छेद करने के लिए जिसे आपने जोड़ा था:
- "सी # एक" जस्ट इन टाइम "दुभाषिया" पर निर्भर करता है - गलत - यह एक जेआईटी कंपाइलर है । एक विधि JITted हो जाने के बाद , संकलित कोड को प्रत्येक आह्वान के लिए पुन: उपयोग किया जाता है। संकलित कोड मूल, पूर्व संकलित कोड के रूप में तेजी से बंद करने के लिए है।
- "क्सीनन सीपीयू एक" जगह "प्रोसेसर" है - क्या उसका मतलब "क्रम में" है? - और "क्सीनन सीपीयू की कोई शाखा भविष्यवाणी नहीं है" । उनका तात्पर्य यह है कि जेआईटी संकलन स्वाभाविक रूप से खराब कोड का उत्पादन करता है जिसे सीपीयू द्वारा फिर से आदेश दिया जाना चाहिए और बहुत सारे ब्रांचिंग का कारण बनता है - जो कि निरर्थक बकवास है । इस CPU आर्किटेक्चर पर चलने के लिए समान प्रदर्शन सलाह C ++ और C # दोनों पर लागू होती है।
- "[JIT] को 360 पर लगातार फ्लशिंग की आवश्यकता होती है" - गलत, संकलित कोड को कैश में रखा जा सकता है जैसे किसी भी सामान्य रूप से संकलित कोड। (यदि वह पाइपलाइन फ्लश का मतलब है, तो उपरोक्त बिंदु देखें।)
- "जेनेरिक [...] कोड पीढ़ी का उपयोग करें" - जेनरिक हर चीज की तरह JITted हैं और बाकी सभी चीजों की तरह, JITted कोड फास्ट है। जेनरिक का उपयोग करने के लिए कोई प्रदर्शन दंड नहीं है।
- "भाषा के सभी सेक्सी बिट्स [...] को या तो शाखा भविष्यवाणी की आवश्यकता होती है ..." - यह C ++ पर भी कैसे लागू नहीं होता है? - "... या [...] इन-प्लेस कोड जेनरेशन" - क्या उसका अर्थ है JITting? क्या मैंने उल्लेख किया है कि यह तेज है? (मैं उन सभी जगहों पर नहीं जाऊँगा जहाँ डेस्कटॉप सीएलआर वास्तविक कोड जेनरेशन का उपयोग करता है - एक फीचर जो Xbox 360 द्वारा समर्थित नहीं है!)
- "[C # के पास बड़े पैमाने पर पुस्तकालय नहीं हैं [C ++]" - सिवाय, कहें, XNA ही? और बहुत कुछ । (फिर भी, यह कुछ हद तक सही है।)
Xbox 360 पर XNA .NET कॉम्पैक्ट फ्रेमवर्क CLR के संशोधित संस्करण पर चलता है। मुझे इसमें कोई संदेह नहीं है कि यह डेस्कटॉप संस्करण के मानक तक नहीं है। JITTER शायद उतना अच्छा नहीं है - लेकिन मुझे नहीं लगता कि यह बुरा है । मुझे आश्चर्य है कि उन्होंने कचरा कलेक्टर का उल्लेख नहीं किया जो डेस्कटॉप सीएलआर की तुलना में भयानक है ।
(बेशक - आप एक पेशेवर विकसित खेल में कचरा कलेक्टर मार नहीं किया जाना चाहिए वैसे भी , बस के रूप में आप में आवंटन के साथ सावधान रहना चाहिए किसी भी व्यावसायिक ग्रेड खेल।)
(.NET कॉम्पैक्ट फ्रेमवर्क की वास्तविक तकनीकी चर्चा के लिए, शायद इस लेख श्रृंखला के साथ शुरू करें: अवलोकन , जेआईटी कम्पाइलर , और जीसी और ढेर ।)
जिस तरह से वह अपनी शब्दावली के बारे में पूरी तरह से अनिर्दिष्ट है, उसे यह समझने में भी मुश्किल होती है कि उसका क्या मतलब है। या तो वह अधिकतम-रैंट मोड में है, या वह नहीं जानता कि वह किस बारे में बात कर रहा है।
अब जब हम मिल गया है कि रास्ते से बाहर, यहाँ कुछ चीजें हैं जो आप कर रहे हैं है 360 पर XNA का उपयोग कर के बजाय देशी जाकर पर बाहर याद आती :
- वास्तव में तेजी से सीपीयू फ्लोटिंग पॉइंट मैथ्स करने के लिए SIMD / वेक्टर यूनिट तक पहुंच
- मूल भाषा कोड का उपयोग करने की क्षमता जो शायद C # से थोड़ी तेज होगी
- आप स्मृति कैसे आवंटित करते हैं, इसके साथ थोड़ा सा आलसी होने की क्षमता
- XBLIG गेम की 6 कोर में से केवल 4 तक ही पहुंच है (लेकिन हम अभी भी सभी 3 सीपीयू प्राप्त करते हैं, और वे पूर्ण कोर भी नहीं हैं, इसलिए हम बहुत याद नहीं करते हैं) - सुनिश्चित नहीं है कि यह गैर- XBLIG XNA पर लागू होता है खेल
- सच में अस्पष्ट चालबाजी अस्पष्ट करने के लिए पूर्ण DirectX पहुँच
यह भी इंगित करने योग्य है कि ये केवल सीपीयू-साइड प्रतिबंध हैं। आप अभी भी पूरी तरह से मुफ्त में GPU पर चल रहे हैं।
मैंने इस उत्तर में इन बातों का वर्णन किया है कि यह एक ही प्रश्न के रूप में प्रभावी रूप से क्या है। जैसा कि मैंने उस उत्तर में उल्लेख किया है कि XNA "पेशेवर" विकास के लिए बिल्कुल उपयुक्त है ।
आपके द्वारा बचने का एकमात्र कारण यह है कि आप C # प्रतिभा, लाइसेंस C # इंजन को किराए पर नहीं ले सकते हैं, और मौजूदा C # कोड का पुन: उपयोग कर सकते हैं उसी तरह से आप C ++ ज्ञान के मौजूदा आधार के साथ कर सकते हैं। या इसलिए कि आप ऐसे प्लेटफ़ॉर्म को भी लक्षित कर रहे हैं जो C # का समर्थन नहीं करता है।
बेशक, हम में से कई लोग जो "पेशेवर" डेवलपर्स नहीं हैं, एक्सएनएक्सएक्स 360 पर पाने के लिए हमारा एकमात्र विकल्प है, जिससे बिंदु मूट हो जाता है।
आपके अन्य सवालों के जवाब देने के लिए:
C # में कुछ भी आपको डेटा-ओरिएंटेड एप्रोच का उपयोग करने से रोकता है, ठीक उसी तरह जैसे आप C ++ में उनका उपयोग करेंगे।
C # में संकलन-समय पर स्वचालित रूप से इनलाइन कोड की क्षमता का अभाव है, और (बिना जांच किए) मैं बहुत यकीन है कि कॉम्पैक्ट CLR के JITTER इनलाइन तरीकों (डेस्कटॉप सीएलआर नहीं कर सकता) कर सकता हूं। तो प्रदर्शन-महत्वपूर्ण कोड के लिए आपको C # में मैन्युअल रूप से इनलाइन करना पड़ सकता है, जहाँ C ++ कुछ सहायता प्रदान करता है।
संभवतः एक बड़ा कारण है कि आप अक्सर सीपीयू-मैथ्स की गहन चीजों को नहीं देखते हैं जैसे कि सी # में टकराव का पता लगाने और तरल पदार्थ के सिमुलेशन में वेक्टर यूनिट तक पहुंच का अभाव है (जैसा कि ऊपर उल्लेख किया गया है)।