मेरे कोड में, मैं बड़ी संख्या में कार्य करता हूं, प्रत्येक को डेटा को अस्थायी रूप से संग्रहीत करने के लिए स्मृति की एक बड़ी सरणी की आवश्यकता होती है। मेरे पास लगभग 500 कार्य हैं। प्रत्येक कार्य की शुरुआत में, मैं के लिए स्मृति को आबंटित एक सरणी: अबपुन: उपयोग करने वाले सरणी सी # में प्रदर्शन को इतना महत्वपूर्ण क्यों बढ़ाते हैं?
double[] tempDoubleArray = new double[M];
एम एक बड़ी संख्या में सटीक काम पर निर्भर करता है, आम तौर पर चारों ओर 2000000., मैं कुछ जटिल गणना करने वालों को भरने के लिए, और अंत में मैं इस कार्य के परिणाम को निर्धारित करने के लिए सरणी का उपयोग करता हूं। उसके बाद, tempDoubleArray गुंजाइश से बाहर चला जाता है।
प्रोफाइलिंग से पता चलता है कि सरणी बनाने के लिए कॉल समय लेने वाली हैं। इसलिए, मैं इसे स्थिर और पुन: उपयोग करके, सरणी को आजमाने और पुन: उपयोग करने का निर्णय लेता हूं। इसके लिए पर कुछ अतिरिक्त जॉगलिंग की आवश्यकता है जो सरणी के न्यूनतम आकार को समझता है, जिसमें सभी कार्यों के माध्यम से अतिरिक्त पास की आवश्यकता होती है, लेकिन यह काम करता है। अब, कार्यक्रम बहुत तेज़ है (सभी कार्यों के निष्पादन के लिए 80 सेकंड से 22 सेकंड तक)।
double[] tempDoubleArray = staticDoubleArray;
हालांकि, मैं क्यों ठीक इस इतनी अच्छी तरह से काम करता है के अंधेरे में एक सा रहा हूँ। आईडी का कहना है कि मूल कोड में, जब tempDoubleArray गुंजाइश से बाहर हो जाता है, तो इसे एकत्र किया जा सकता है, इसलिए एक नई सरणी आवंटित करना मुश्किल नहीं होना चाहिए?
मैं यह पूछता हूं क्योंकि यह समझने में समझने से मुझे एक ही प्रभाव प्राप्त करने के अन्य तरीकों को समझने में मदद मिल सकती है, और क्योंकि मैं जानना चाहता हूं कि आवंटन किस मामले में प्रदर्शन के मुद्दों को देता है।
यह * नहीं * एन चर बना रहा है - यह केवल स्मृति का एक हिस्सा आवंटित कर रहा है और बिट्स को शून्य-आउट कर रहा है। उदाहरण के लिए सरणी निर्माण के दौरान कभी भी रचनाकारों को बुलाया नहीं जाता है। कोर i7 मेमोरी बैंडविड्थ के वास्तव में किसी न किसी अनुमान के आधार पर, आप उन 16 एमबी को 1 एमएमएस के क्रम में शून्य करने की उम्मीद करेंगे। –
@EamonNerbonne: स्पष्ट होने के लिए, मैंने कहा कि यह चर बना रहा है (जो यह है), नहीं * उदाहरण *। –
लेकिन आपको यह मानना होगा कि यह कहना एक अजीब बात है। एक चर बनाने के लिए _mean_ क्या है? एक चर एक सार, संकलन-समय धारणा है जो रनटाइम पर स्वयं को कुछ भी नहीं करता है। –