मैं मूल रूप से एक देशी सी ++ प्रोग्रामर हूं, सी ++ में आपके प्रोग्राम में प्रत्येक प्रक्रिया आपके कोड से जुड़ी है, यानी, जब तक आप ऐसा नहीं करना चाहते हैं तब तक कुछ भी नहीं होता है। और आपके द्वारा लिखे गए अनुसार अनुसार स्मृति की हर बिट आवंटित की जाती है (और हटा दी जाती है)। इसलिए, यदि आप अच्छा करते हैं, तो प्रदर्शन आपकी सभी ज़िम्मेदारी है, आपको बहुत अच्छा प्रदर्शन मिलता है।प्रबंधित कोड में, मुझे अच्छा प्रदर्शन रखने के लिए क्या देखना चाहिए?
(नोट: कृपया उस कोड के बारे में शिकायत न करें जिसने स्वयं को एसटीएल जैसे नहीं लिखा है, यह एक सी ++ अप्रबंधित कोड है, यह महत्वपूर्ण हिस्सा है)।
लेकिन प्रबंधित कोड में, जैसे कि जावा और सी # में कोड, आप प्रत्येक प्रक्रिया को नियंत्रित नहीं करते हैं, और स्मृति कुछ हद तक "छुपा" है, या आपके नियंत्रण में नहीं है। और यह कुछ अपेक्षाकृत अज्ञात प्रदर्शन करता है, ज्यादातर आप खराब प्रदर्शन से डरते हैं।
तो मेरा सवाल यह है कि: प्रबंधित कोड में एक अच्छा प्रदर्शन प्राप्त करने के लिए मुझे क्या समस्याएं और बोल्ड लाइन्स की देखभाल करनी चाहिए और ध्यान में रखना चाहिए?
मैं केवल इस तरह के रूप में कुछ प्रथाओं के बारे में सोच सकता है:
- मुक्केबाजी और unboxing के बारे में पता होने के नाते।
- सही संग्रह का चयन करना जो आपकी आवश्यकताओं को सर्वोत्तम रूप से सुइट करता है और सबसे कम ऑपरेशन लागत है।
लेकिन ये कभी भी पर्याप्त और भरोसेमंद नहीं लगते हैं! वास्तव में शायद मुझे उनका उल्लेख नहीं करना चाहिए था।
कृपया ध्यान दें कि मैं एक सी ++ वीएस सी # (या जावा) कोड की तुलना नहीं कर रहा हूं, मैंने समस्या की व्याख्या करने के लिए अभी सी ++ का उल्लेख किया है।
.NET हमेशा जेआईटी मूल कोड में सबकुछ संकलित करता है। और मुझे नहीं लगता कि यह सट्टा इनलाइनिंग, या पुनर्मूल्यांकन करता है। –
@BenVoigt [इस उत्तर] के अनुसार (http://stackoverflow.com/questions/4043821/performance-differences-between-debug-and-release-builds/4045073#4045073) .NET JIT कंपाइलर कई संख्या करता है इन-लाइनिंग विधि सहित अनुकूलन। जिस बिंदु को मैं बना रहा था वह यह है कि प्रबंधित भाषाएं रनटाइम पर अनुकूलन या उपयोग किए जाने पर ऐसे अनुकूलन करने की क्षमता प्रदान करती हैं। – ahjmorton
जब यह लक्ष्य स्थिर रूप से निर्धारित किया जा सकता है तो यह रेखांकित करता है। सट्टा इनलाइनिंग एक और अधिक उन्नत तकनीक है जो हॉटस्पॉट करता है और .NET नहीं करता है। –