2000+ नेस्टेड ऑब्जेक्ट्स इतना बड़ा नहीं है, और आरटीटीआई (डिस्क एक्सेस या संपीड़न बहुत धीमा हो जाएगा) के साथ भी धीमा नहीं होगा। सीधे SaveToStream मैन्युअल क्रमबद्धता के साथ, यदि आप FastMM4 (डेल्फी 2006 के बाद से डिफ़ॉल्ट मेमोरी प्रबंधक) का उपयोग करते हैं, तो यह बहुत तेज़ है।
शायद आप अपना एल्गोरिदम बदल सकते हैं और इसके बजाय गतिशील सरणी का उपयोग कर सकते हैं (एक ओपन सोर्स सीरिएलाइज़र here है)। लेकिन आपका डेटा इस तरह के रिकॉर्ड फिट नहीं हो सकता है।
या कभी भी कभी-कभी स्मृति रिलीज़ नहीं करते हैं, और केवल ऑब्जेक्ट्स या रिकॉर्ड संदर्भों का उपयोग करते हैं। आपके पास कुछ प्रकार के मैनुअल कचरा कलेक्टर के साथ ऑब्जेक्ट्स का एक इन-मेमोरी पूल हो सकता है, और केवल ऑब्जेक्ट्स (या रिकॉर्ड्स) के संदर्भ में संभाल सकता है।
आप string
वस्तुओं के अंदर है, तो आप उन्हें पुनः आवंटित नहीं हो सकता और इस्तेमाल किया तार के एक वैश्विक सूची बनाए रखने: संदर्भ गिनती और कॉपी-ऑन-राइट यह बहुत मानक क्रमबद्धता और आवंटन (यहां तक कि FastMM4 के साथ) की तुलना में तेजी कर देगा।
सभी मामलों में, यह आपके आवेदन की वास्तविक प्रोफाइलिंग के लायक है। प्रदर्शन बाधाओं के बारे में सामान्य मानव अनुमान ज्यादातर समय गलत हैं। केवल एक प्रोफाइलर और दीवार घड़ी पर भरोसा करें। शायद आपका वर्तमान कार्यान्वयन इतना धीमा नहीं है, और असली बाधा वस्तु प्रक्रिया नहीं है, लेकिन कहीं और।
बहुत जल्दी अनुकूलित न करें। "इसे तेज़ी से बनाने से पहले इसे सही बनाएं। इसे तेज़ी से बनाने से पहले इसे साफ़ करें। इसे सही बनाते समय इसे सही रखें।" - केर्निगन और प्लोगर, प्रोग्रामिंग स्टाइल के तत्व।
स्रोत
2011-10-17 20:37:23
तो आप वस्तुओं को क्लोन किए बिना स्मृति चिन्ह को कार्यान्वित नहीं कर सकते? क्या आपके सभी ऑब्जेक्ट्स टीपीर्सिस्टेंट से विरासत में हैं, और इस प्रकार टीपीर्सिस्टेंट का समर्थन करते हैं। साइन इन आपकी सबसे अच्छी शर्त है? –
आप तब तक ऐसा कर सकते थे जब आपकी वस्तुओं में संदर्भ नहीं थे। –
समस्या यह है कि ऑब्जेक्ट इसकी स्मृति से अधिक है। खुली फाइलों, अन्य हैंडल, सिंक्रनाइज़ेशन प्राइमेटिव्स, रीफ्रैंटिंग के साथ इंटरफेस इत्यादि के बारे में क्या? केवल वस्तु ही जानता है कि खुद को सही तरीके से कैसे कॉपी करें। – haimg