किसी भी समय आपके पास एक एप्लिकेशन है जिसमें एक प्रदर्शन-गहन महत्वपूर्ण पथ है, आपको चिंतित होना चाहिए कि आप स्मृति का इलाज कैसे करते हैं। अधिकांश एंड-यूज़र क्लाइंट-साइड एप्लिकेशन इस श्रेणी में नहीं आते हैं क्योंकि वे प्राथमिक इवेंट-चालित हैं और अधिकांश इवेंट उपयोगकर्ता के साथ इंटरैक्शन से आते हैं, और इसमें बहुत सारे (यदि कोई हो) प्रदर्शन की कमी है।
हालाँकि, बहुत सारे बैक-एंड सॉफ़्टवेयर का कुछ ध्यान इस बात पर होना चाहिए कि मेमोरी को कैसे संभाला जाता है क्योंकि उस सॉफ़्टवेयर का एक बड़ा हिस्सा क्लाइंट की अधिक संख्या, लेनदेन की बड़ी संख्या, अधिक डेटा स्रोतों को संभालने के लिए स्केल कर सकता है .... एक बार जब आप शुरू करते हैं सीमाओं को धकेलते हुए, आप विश्लेषण करना शुरू कर सकते हैं कि आपके सॉफ़्टवेयर उपयोगकर्ता कैसे मेमोरी करते हैं और अपने सॉफ़्टवेयर के अनुरूप कस्टम आवंटन योजनाएं लिखते हैं, बजाय एक पूरी तरह से सामान्य मेमोरी एलोकेटर पर भरोसा करने के लिए जो किसी भी कल्पनीय उपयोग के मामले को संभालने के लिए लिखा गया था।
आपको कुछ उदाहरण देने के लिए ... अपनी पहली कंपनी में मैंने एक इतिहासकार पैकेज पर काम किया, प्रक्रिया नियंत्रण डेटा एकत्र करने / भंडारण / संग्रह करने के लिए ज़िम्मेदार सॉफ़्टवेयर, 10 मिलियन सेंसर के साथ एक कारखाने, परमाणु ऊर्जा संयंत्र या तेल रिफाइनरी के बारे में सोचें, हम उस डेटा को स्टोर करेंगे)। किसी भी समय हमने किसी भी प्रदर्शन की अड़चन का विश्लेषण किया जिसने इतिहासकार को अधिक डेटा संसाधित करने से रोका, ज्यादातर समय यह समस्या थी कि स्मृति को कैसे संभाला जाए। हम यह सुनिश्चित करने के लिए महान लंबाई के माध्यम से गए हैं कि जब तक वे पूरी तरह से आवश्यक नहीं थे, तब तक मॉलोक / मुक्त नहीं कहा जाता था।
अपनी वर्तमान नौकरी में, मैं निगरानी वीडियो डिजिटल रिकॉर्डर और विश्लेषण पैकेज पर काम करता हूं। 30 एफपीएस पर, प्रत्येक चैनल को हर 33 मिलीसेकंड में एक वीडियो फ्रेम प्राप्त होता है। हमारे द्वारा बेचे जाने वाले हार्डवेयर पर, हम आसानी से वीडियो के 100 चैनल रिकॉर्ड कर सकते हैं। इसलिए यह सुनिश्चित करने के लिए एक और मामला है कि महत्वपूर्ण पथ (नेटवर्क कॉल => कैप्चर घटकों => रिकॉर्डर प्रबंधन सॉफ़्टवेयर => भंडारण घटकों => डिस्क) में कोई गतिशील मेमोरी आवंटन नहीं है। हमारे पास एक कस्टम फ्रेम एलोकेटर है, जिसमें बफ़र्स की निश्चित आकार की बाल्टियाँ हैं और पहले से आवंटित बफ़र्स का पुन: उपयोग करने के लिए LIFO का उपयोग करता है। यदि आपको 600Kb संग्रहण की आवश्यकता है, तो आप 1024Kb बफर के साथ समाप्त हो सकते हैं, जो अंतरिक्ष को बर्बाद करता है, लेकिन क्योंकि यह हमारे उपयोग के लिए विशेष रूप से सिलवाया गया है, जहां प्रत्येक आवंटन बहुत अल्पकालिक है, यह बहुत अच्छी तरह से काम करता है क्योंकि बफर का उपयोग किया जाता है,
मैंने जिस प्रकार के अनुप्रयोगों का वर्णन किया है (ढेर सारे डेटा को ए से बी तक ले जाना और बड़ी संख्या में क्लाइंट रिक्वेस्ट को संभालना) ढेर पर जा रहा है और पीछे सीपीयू प्रदर्शन बाधाओं का एक प्रमुख स्रोत है। एक न्यूनतम करने के लिए ढेर विखंडन रखना एक माध्यमिक लाभ है, हालांकि जहां तक मैं बता सकता हूं कि अधिकांश आधुनिक ओएस पहले से ही कम-विखंडन ढेर को लागू करते हैं ( कम से कम मुझे पता है कि विंडोज करता है, और मुझे उम्मीद है कि अन्य भी ऐसा करेंगे)। व्यक्तिगत रूप से, इन प्रकार के वातावरणों में काम करने वाले 12+ वर्षों में, मैंने सीपीयू के उपयोग के मुद्दों को ढेर से संबंधित देखा है, जबकि कभी भी मैंने कभी ऐसा सिस्टम नहीं देखा है जो वास्तव में खंडित हीप से पीड़ित हो।